1. Program vs Process
1.1 program
- 컴파일하고 생긴 exe 파일, 디스크에 있는 여러 명령 및 정적데이터
1.2 process
- 실행중인 프로그램
- 기계의 상태 (레지스터, 메모리, 열려있는 파일 목록 )
- 프로그램 하나를 여러번 실행하면 여러 프로세스 생성
2. Virtualization
이상은 서로 양보하며 잘 나눠쓰면 좋지만 현실은 독점하려고 한다. 운영체제는 virtualization을 통해 이상을 실현하려고한다. 가장 대표정은 방법은 Time sharing 이 있다.
2.1 Time sharing
- 실제로 물리적 CPU가 하나또는 몇개뿐일 때 가상 CPU가 존재한다는 착각을 하게 됨
- 사용자가 원하는 만큼 많이 동시에 프로세스를 실행시킬 수 있다.
- 기회비용 (CPU를 공유하면 각 CPU는 느리게 실행)
- Context Switch와 정책이 필요하다
2.2 Process State
1) Running - 프로세스 실행중
2) Ready - 프로세스를 실행할 준비가 되었지만 OS가 실행하지 않기로 결정
3) Blocked - 다른 사건이 일어나기 전까지 프로세스를 실행할 준비가 되지 않음 (I/O를 실행할때)
2.3 Process Control Blocks (PCB)
각 사용자의 프로세스는 사용자 모드 스택과 커널모드 스택이 있다. 스레드가 커널에 들어갈 때, 사용자 모드의 스택이 사용하는 모든 레지스터의 내용은 커널 모드 스택에 저장된다.
아래의 코드는 kenel의 PCB 역할을 하는 /include/linux/sched.h 파일이다.
struct task_struct {
volatile long state; /* 프로세스 상태 */
void *stack; /* 스택의 위치 */
…
unsigned int cpu; // CPU 코어 번호
…
struct mm_struct *mm; //memory virturation 을 위한 구조체
…
struct task_struct *parent; //fork 했을 때 부모
struct list_head children; //fork 했을 때 자식의 linked list
…
struct files_struct *files; //이 프로세스가 오픈한 파일들
…
}
2.4 Scheduling Queue
각 프로세스 상태에 따라 큐가 존재한다. (Run Queue, Ready Queue, Waiting Queue)
'학부 내용 정리 > [ 2-1 ] 운영체제' 카테고리의 다른 글
[ OS ] Address Spaces (0) | 2022.04.18 |
---|---|
[ OS ] Multiprocessor Scheduling (1) | 2022.04.17 |
[ OS ] Multi-Level Feedback Queue (0) | 2022.04.17 |
[ OS ] 3. CPU Scheduling (0) | 2022.04.17 |
[ OS ] 2. Limited Direct Execution (0) | 2022.04.17 |