Outline
① Process Concept
② Process Scheduling
③ Operations on processes
④ Inter-Process Communication
① Process Concept
프로세스
- 실행중인 프로그램
상태
1. new
2. running
3. waiting
- 입출력 완료. 신호 수신 등 어떤 사건이 일어나기를 기다림
4. ready
- 프로세스가 처리기에 할당되기를 기다림
5. terminated
PCB (Process Control Block)
- 프로세스와 연관된 여러 정보 수록1. Process state
2. Program Counter
3. CPU Registers4. CPU scheduling information5. Memory-managemen information6. Accounting information7. I/O status information
② Process Scheduling
Process scheduling queue
1. Job queue
- 시스템 안의 모든 프로세스들, 메인 메모리로 불러올 프로세스 선택
2. Ready queue
- 준비 완료 상태에서 실행 대기하는 프로세스들
3. Deivce queue
- 특정 입출력 장치를 대기하는 프로세스들
Scheduler
1. Long-term scheduler (Job scheduler)
- 레디 큐로 보낼 프로세스를 선택 (DISK -> 메모리)
2. Short-term scheduler (CPU scheduler)
- 레디 큐에 있는 프로세스를 선택하여 CPU에 할당 (메모리 -> CPU)
3. Medium-term scheduler
- 프로세스 swap in/out 결정 (Swapping)
Context Switch
CPU가 다른 프로세스로 전환될 때, 과거 프로세스의 문맥을 PCB에 저장
새 프로세스의 저장된 문맥 복구
문맥 교환 중에는 시스템이 유용한 일 못함 (overhead)
③ Operations on processes
프로세스 생성 시 고려사항
1. 자원 공유
- 자식 프로세스는 부모 프로세스가 가진 자원의 부분집합을 사용
2. 실행
- 부모는 자식이 실행 종료될 때까지 기다림 (대부분)
- 부모, 자식 병렬적으로 실행
3. 주소 공간
- 자식이 부모의 주소공간 복제
- 자식 프로세스가 자신에게 적재될 새로운 프로그램을 갖고 있음
fork()
1. 자원 공유
- 부모, 자식은 파일을 공유하지만 CPU time, 메모리는 공유하지 않음
2. 실행
- 부모, 자식 병렬적으로 수행
3. 주소 공간
- 부모 프로세스로부터 복제하여 새 프로그램을 로딩 (처음에는 스택, 지역변수, 힙, 프로그램 모두 똑같음)
exec()
자신의 메모리 공간을 새로운 프로그램으로 교체
자식이 종료될 때까지 준비완료 큐에서 자신을 제거하기 위해 wait() 호출
프로세스 종료
1. 자발적 종료
-> exit() 시스템콜 호출하여 삭제 요청
-> 부모 프로세스는 wait() 시스템콜 사용해서 종료된 자식의 PID 반환 받음
-> 프로세스의 모든 자원(물리/가상 메모리, 열린 파일, 입출력 버퍼 등)을 운영체제로 반납
2. 강제 종료
-> abort(), TerminateProcess()
-> 자식이 할당된 자원 초과 사용
-> 자식에게 할당된 태스크가 더이상 필요없을 때
- 부모가 exit() 한 후에 자식이 계속 실행되는 것 허용 안할 때
좀비 프로세스
- 종료되었지만 부모 프로세스가 아직 wait()를 호출하지 않은 프로세스
고아 프로세스
- 부모 프로세스가 wait() 호출하지 않고 종료. 새로운 부모 프로세스로 init 프로세스를 지정
④ Inter-Process Communication
운영체제 내에서 실행되는 병행 프로세스들은 독립적이거나 협력적임
협력적 프로세스는 다른 프로세스와 영향을 주고받아야 함
1. 공유 메모리 (Shared memory)
- 생산자-소비자 문제: 생산자가 정보 채워놓고, 소비자가 소모할 수 있는 항목들의 버퍼가 사용가능 해야 함
- 동기화를 통해 생산되지 않은 항목들을 소비자가 소비하려고 시도하지 않음
- 공유 영역 이외의 다른 프로세스의 메모리에 접근 불가
2. 메시지 전달 (Message passing)
- 두 프로세스간 통신을 위해 통신 연결 (communication link) 필요
1) 직접 통신 (Direct communication): 통신을 원하는 각 프로세스는 송/수신자의 이름을 명시해야 함
2) 간접 통신 (Indirect communication): 메시지들을 메일박스, 포트로 송/수신
● 동기화
1. Blocking send(봉쇄형 / 동기식 보내기)
- 송신자는 메시지가 수신될 때까지 막힘. 수신되면 다음 작업 진행
2. Non-blocking send(비봉쇄형 / 비동기식 보내기)
- 송신자가 메시지를 보내고 작업 재시작. 계속 보낼 수 있음
3. Blocking receive(봉쇄형 / 동기식 받기)
- 메시지가 이용 가능할 때까지 수신자 막힘
- receive() 호출했는데 메일박스에 메시지 없으면 waiting 상태로 전환 (멈춤)
4. Non-blocking receive(비봉쇄형 / 비동기식 받기)
- 송신자가 유효한 메시지 또는 null을 받음. 메시지 도착 안해도 다음 라인 수행
● 버퍼링
통신하는 프로세스들에 의해 교환되는 메시지는 임시 큐에 들어가있음
1. 무용량(zero capacity)
- 송신자는 수신자가 메시지를 수신할 때까지 기다려야 함
2. 유한용량(bounded capacity)
- 큐가 꽉 차면 송신자는 block됨
3. 무한용량(unbounded capacity)
- 송신자 절대 block 안됨
● 공유 메모리 VS 메시지 패싱
1. 공유 메모리
- system call이 공유 영역을 attach 할 때만 필요함. 속도 빠름
- 보호 메커니즘 필요 (spin lock, 동기화)
2. 메시지 패싱
- 네트워크에 연결된 컴퓨터간 통신에 용이. (컴퓨터 간에는 메모리 공유 불가)
- 작은 양의 데이터 교환에 용이
- system call이 매번 호출되기 때문에 속도 느림
- 프로그래밍이 용이
'CS 공부 > 운영체제' 카테고리의 다른 글
Chapter 6, 7 Process Synchronization (0) | 2021.09.23 |
---|---|
Chapter 5. Process scheduling (0) | 2021.09.23 |
Chapter 4. Threads & Concurrency (0) | 2021.09.17 |
Chapter 2 (0) | 2021.09.16 |
Chapter 1 (0) | 2021.09.16 |