프로세스란? 실행 중인 프로그램.
프로그램은 실행 가능한 파일이 메모리로 로드되면 프로세스가 된다.
하나의 프로그램은 여러 개의 프로세서가 될 수 있다.
프로세서가 한개라면 실행중인 프로세스는 한 개 이상 있을 수 없다.
multi-programming의 목적은 CPU utilization을 최대화하기 위하여 항상 어떤 프로세스가 실행되도록 하는 것이다.
Process in Main Memory
text section : 프로그램 코드.
Data section : 전역변수
Stack : 함수, return address, 지역변수 등.. 위에서 아래로 내려온다
Heap : 동적 할당 메모리
프로세스 상태(Process State)
프로세스는 실행되면서 상태가 변화한다.
(1) New : 프로세스가 생성 중이다.
(2) Running : 명령어들이 실행되고 있다.
(3) Waiting : 프로세스가 어떤 event가 일어나기를 기다린다.
(4) Ready : 프로세스가 processor에 할당되기를 기다린다.
(5) Terminated : 프로세스의 execution이 종료되었다.
- ready, running, waiting은 실행 중인 상태이다.
- ready는 CPU 할당 받으면 실행 가능한 상태
- waiting은 CPU줘도 사용 못하는 상태
while(1) 은 무한히 실행되는 것 같지만, ready와 running 상태를 무한 반복 중인 상태이다.
running → ready : time out interrupt
ready → running : shceduler dispatch
runnig → waiting : I/O 요청 , 혹은 이벤트 발생을 기다림
waiting → ready : I/O와 event가 끝나고 대기 큐에 들어감 (입출력 인터럽트)
PCB (Process Control Block)
- 각 프로세스에 관련된 중요한 정보
- 메인 메모리에 저장된다.
<PCB에 저장된 내용>
- Process state - running, waiting
- Program Counter - 다음에 실행할 명령어의 시작 주소
- CPU 레지스터
- CPU 스케줄링 정보 : 프로세스 우선순위, 큐에 대한 포인터
- Memory 관리 정보 : base register, page table, segment table 등의 정보가 담겨있다.
- Accounting 정보 : CPU 사용시간, real time used, time limit
- 입출력 상태 정보 : 해당 프로세스에 할당된 I/O 디바이스 open file 목록 등
Thread
- CPU 이용의 기본 단위
- 한 프로세스가 하나 이상의 스레드를 가져 한 번에 하나 이상의 task를 수행할 수 있도록 하는 것.
- 여러 Thread가 병렬로 수행되는 multi-core system에서 이익을 얻을 수 있다.
- PCB는 각 Thread에 대한 정보를 포함하도록 한다.
프로세스 스케줄링
- process scheduler는 CPU에서 실행 가능한 여러 프로세스들 중 한 프로세스를 선택한다.
- CPU utilization을 최대화하기 위하여 빠르게 프로세스를 교체한다.
스케줄링 큐
- 프로세스가 시스템에 들어오면 job queue에 들어간다.
- Ready queue : Ready 상태에서 실행을 대기하는 프로세스들
- Wait queue : wait 상태에서 이벤트를 기다리는 프로세스들이 들어간다.
- PCB를 링크드리스트로 연결하여 Queue에 저장되어 있다.
<프로세스가 waiting 하는 이유는 다 다르다. 기다리는 이유 별로 queue를 가지고 있다.>
Context Switch (문맥교환)
- CPU는 하나이고 실행할 프로세스는 여러개이니 문맥교환이 꼭 필요하다.
- 문맥교환 시간은 오버헤드(간접적인 처리 시간)다. 시스템은 문맥교환하는 동안 일을 제대로 하지 못함
문맥 교환 시, running 하던 프로세스의 상태 정보를 PCB에 저장하고, 실행할 프로세스의 PCB를 로드한다.
모바일 시스템에서의 멀티테스킹 : user interface에 의해 제어되는 process는 foreground process. 메모리에 있고 실행 중이지만 화면에 보이지 않는 프로세스는 background process.
프로세스 생성
- OS kernel 내부에 PCB를 생성한다
- 메모리 공간을 할당한다.
- binary 프로그램을 로드한다. (.exe)
- 프로그램을 초기화한다.
(프로그램이 실행할 때 메모리에 있는 프로그램의 시작 주소를 PC에 저장한다!)
부모 프로세스 and 자식 프로세스
Create
부모프로세스는 자식프로세스를 생성할 수 있다.
자원 공유 옵션
- 부모와 자식은 모든 자원을 공유한다
- 자식은 부모의 자원 일부를 공유한다
- 부모와 자식을 자원을 공유하지 않는다.
실행 옵션
- 부모와 자식 동시 실행
- 부모는 자식 프로세스가 죽기를 기다린다.
주소 공간
- 자식 프로세스가 부모 프로세스를 복제한다. code, heap, data, stack이 동일 (pid는 당연히 다름)
- 자식 프로세스는 새로 로드된다.
fork()
- fork를 실행하는 순간 하나가 더 복사된다.
- return이 두 군데서 일어난다.
- 부모의 return 값 = 자식의 pid 즉 > 0
- 자식의 return 값 = 0
- init 최초의 프로세스 pid = 1
- 보통 자식 프로세스 pid = 부모 pid + 1
- ppid는 프로세스의 부모 프로세스 pid 값을 나타냄
- 부모 프로세스는 자식 프로세스가 종료될 때 까지 wait 한다.
- wait는 자식 프로세스가 정상 종료하면 종료된 자식의 pid를 반환, 비정상 종료 시 -1을 반환
Termination
- 보통 OS 는 부모프로세스가 죽었을 때 자식프로세스가 살아 있는 것을 불허한다. 부모가 죽는 순간 자식 프로세스 다 죽임
- 자식이 먼저 exit 하고 부모가 wait해서 끝나지 않는 프로세스 → 좀비프로세스
- 부모 프로세스가 wait를 호출하지 않고 종료해버린 프로세스 → 고아 프로세스
- 고아 프로세스는 ppid = 1로 바꾸어 init 프로세스를 새로운 부모 프로세스로 지정한다.
멀티프로세스 구조 - 크롬 브라우저
만약 크롬이 싱글 프로세스로 운영되었다면? - 한 사이트가 먹통이 되면 모든 작업이 망가진다!
- Browser process 는 유저 인터페이스, 디스크, 네트워크 I/O를 관리함
- Renderer process는 각 오픈된 탭마다 별도로 생성된다.
프로세스 간 통신(IPC)
Independent process는 서로 실행에 영향을 주지 않는다. 하지만 Cooperation process는 서로 협조하는 프로세스이다. 따라서 IPC ( Interprocess communication)이 필요하다.
Shared memory
공유 가능한 별도의 메모리공간. 효율적이다.
- (원래 프로세스는 다른 프로세스의 메모리에 접근할 수 없다)
Message Passing
메세지 큐를 통해 통신한다. 보안상 좋다. 그러나 많은 데이터를 주고 받을 때 비효율적임.
메세지 전달 시스템에서 사
- Direct Communication
- 프로세스 간에 서로의 이름을 명시적으로 지정해야 한다.
- Indirect Communication
- 메세지가 메일 박스를 통해 전달된다.
동기화 Synchronization
- 동시에 여러 개의 프로세스가 동일한 데이터에 접근하여 조작하고, 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황을 경쟁 상황이라고 한다. -> 이러한 경쟁 상태를 해결하고 공유자원의 일관성을 유지하기 위해 동기화가 필요함
- Blocking은 동기화를 고려한다. 요구가 만족될 때 까지 블로킹함
- Non-blocking은 동기화를 고려하지 않음. ex ) email
Buffering
- 무용량(zero capacity) - 큐의 최대 길이가 0이다. 이 경우 sender는 reciever가 메세지를 수신할 때 까지 기다려야 한다
- 유한 용량(bounded capacity) - 큐는 유한한 길이 n을 가진다. 큐가 꽉 찼을 때 sender는 큐가 이용 가능할 때 까지 blocking 된다.
- 무한 용량 (unbounded capacity) - 큐는 무한한 길이를 가지며, sender는 어느 경우에도 blocking되지 않는다.
'CS지식 > 운영체제' 카테고리의 다른 글
운영체제 : Synchronization (0) | 2023.09.23 |
---|---|
운영체제 : CPU 스케줄링 간단 정리 (0) | 2023.09.23 |
운영체제 : Thread 란? (0) | 2023.09.23 |
OS 구조 (0) | 2023.09.23 |
OS가 하는 일 (0) | 2023.09.23 |