Memory Layout
- Text section: program code
- Data Section: (initialized and uninitialized) global variable
- Stack section: temporary data(function parameter, return address, local variable)
- Heap section: memory dynamically allocated during runtime
Process state
PCB
운영체제가 프로세서를 제어하기 위해 정보를 저장해 놓은 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.
- Process state: running, waiting etc
- Program counter: 다음 수행할 명령어의 위치
- CPU register: 레지스터 관련 정보
- CPU scheduling information: 우선순위, scheduling queue pointers
- Accounting information: CPU 사용시간, 실제 사용된 시간
- IO status information: 프로세스에 할당된 IO device들, 열린 파일 리스트
- Memory information: 프로세스에 할당된 메모리
Scheduling queues
- Ready queue: 메인 메모리에 있는 모든 프로세스의 집합, ready와 waiting 상태를 가지고 있다.
- Wait queue: waiting 상태를 갖는 프로세스들의 집합
- Wait queue에 있다가 준비가 되면 ready queue로 보내서 스케쥴링 될 수 있게 관리
Context switch
- 프로세스를 진행하다가 다른 프로세스를 실행할 때 PCB에 저장해 놓음
- Context switch는 순수 오버헤드로 바뀌는 동안 유용한 작업을 수행하지 않음
- 하드웨어에 따라 context switch 시간이 달라짐(레지스터가 여러 개이면 굳이 메모리에 저장하지 않고 레지스터에 직접 저장해놓고 필요할 때 다시 불러오면 빠름)
Process creation
- 부모 프로세서가 자식 프로세서를 만듬(트리 형태를 이룸)
- Pid를 통해 관리됨
- Fork라는 system call을 부르면 child가 생성됨
- 위 그림에서는 child가 끝날 때까지 parent가 기다림
- Exit이 불리면 process management 리소스들을 delocation 해줌
- 부모 프로세스는 abort() system call을 사용해 자식 프로세스를 종료시킬 수 있음
- 부모 프로세스가 종료되기 위해서는 자식 프로세스를 모두 종료시켜야함(Cascading termination)
- 부모 프로세스가 자식 프로세스를 만들고 wait을 하면 그. 때의 부모 프로세스의 상태가 저장됨 (pid = wait(&status);)
- Waiting 하고 있는 부모 프로세스가 없으면 그 프로세스는 Zombie가 된다. (exit status를 return할 부모 프로세스가 있어야 종료될 수 있으므로)
- 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식 프로세스는 Orphan이 된다.
Interprocess communication
프로세스끼리 협력할 때는 interprocess communication이 필요하다.
1. Shared memory
- 커널에 shared memory 공간 요청 후 공간이 만들어지면 거기서 의사소통
- 동시에 shared memory에 접근하면 안되므로 Synchronization 필요
- shm_open()으로 공유 공간을 만들고 ftruncate()로 사이즈를 정함, mmap()으로 포인터를 얻어와서 매핑을 함
2. Message passing
- 커널을 통해 메시지를 보내 의사소통
- Coummunication link를 만들고 send/receive로 메시지를 주고 받음
- Direct communication – 두 프로세스가 직접 의사소통
- Indirect communication 메시지를 주는 쪽이 mailbox에 메시지를 넣어놓으면 받는 쪽이 가져감
- Blocking: 상대가 받을 때까지 기다리고(blocking send), 메시지가 올 때까지 기다림(blocking receive)
- Non-blocking: 보내고 하던 거 마저 함
- Buffering
1) Zero capacity: 메시지가 오자마자 보냄(송신지가 수신자를 기다려야함)
2) Bounded capacity: 일정한 용량만큼 메시지 저장(기다릴 필요 X)
3) Unbounded capacity: 무한정 메시지 저장
'학교공부 > 운영체제' 카테고리의 다른 글
[운영체제] Synchronization Examples (0) | 2023.04.24 |
---|---|
[운영체제] Synchronization tools (0) | 2023.04.24 |
Excercise 2. Process Management (0) | 2023.04.23 |
[운영체제] CPU 스케줄링(CPU Scheduling) (0) | 2023.04.23 |
[운영체제] 운영체제 구조(Operating System Structure) (0) | 2023.04.23 |