- Process는 Job 또는 User Programs or Task로 불릴 수도 있다.
- 현재 실행 중인 프로그램
- 항상 순차적으로 진행 / 한 번에 하나씩
[Process 구성요소]
- Program Counter
- Stack
- Data Section
- text : Program Code를 칭함
- Data : Global variables(하나의 process 외 공유할 수 있는 전역변수)
- Heap : 추가적인 메모리 공간을 요청하거나 반환할 수 있음
- Stack : 추가적인 메모리 공간을 요청하거나 반환할 수 있음, 일시적인 지역변수를 할당할 수 있음
- Process는 다섯가지 상태를 가질 수 있음
- new : 생성되었을 때
- ready : CPU만 할당 받으면 바로 실행할 수 있도록 기다리는 상태
- running : 실행중
- waiting : 이벤트가 발생하는 것을 기다리는 상태
- terminated : 끝난 상태
- 각각의 Process 상태 또는 가져야할 정보를 Process Control Block에 저장하고 있음
- 각각의 Process는 자신만의 PCB를 가지고 있음
- Process state(상태)
- PC
- CPU registers 값
- CPU scheduling information (우선순위, queue ptr, etc)
- 메모리 관리 정보 (Base/Limit register, Page/Seg Table)
- Accounting Information
- I/O status Information
→ PCB는 메모리에 ID값을 유지하면서 저장되어있음
→ register에 저장되어있을 수도 있음 (성능 측면에서 memory보다 좋음 : 빠르기 때문에)
- Context Switch : 하나의 Process가 종료된 후 운영체제(=Scheduling)에 의해 다음 Process로 넘어가도록 하는 것
- 진행 중이던 PCB값 저장 → 다음에 load할 새로운 PCB값 load
- Context Switch Time은 Overhead이다. 따라서 많이 load할 경우 성능 측면에서 Overhead가 많이 발생하는 것과 동일하다.
- 진행 중이던 Process에 Interrupt or System call 발생
- PCB값 저장
- CPU Scheduling을 통해 다음 PCB값 load
- 다음 Process executing
- Job queue : 모든 system process 집합
- Ready Queue : 메모리 안에서 실행을 기다리고 있는 준비된 process
- Device queues : I/O device를 기다리고 있는 process queue
- Job Queue는 하드디스크에 존재하는 작업들이 들어오는 공간
- Ready State가 된 process를 ready queue에 push함
- CPU로 넘겨서 각각의 작업을 수행할 수 있음
- I/O Request가 들어오면 I/O queue를 통해 작업을 수행하고 다시 해야할 경우 다시 ready queue로 넣을 수 있음
- Time Slice Expired : CPU는 작업을 한 번에 다 처리하지 않고 정해진 시간만 할당함. 할당된 시간이 모두 끝나면 CPU는 관여하지 않음. 그럼 작업 재개를 위해 Ready Queue에 다시 넣어야 함
- Fork a Child : Parent는 Child를 생성하여 작업을 부여할 수 있음
- Wait for an Interrupt : Interrput / Signal을 기다릴 수 있음
- 맨 위 queue는 Ready Queue
- 그 아래들은 각각의 process or device가 가지는 queue
- head와 tail을 통해 작업의 연계 표현 가능
- Long-term : 존재하는 모든 process들 중 ready queue로 보낼 것을 선택
- Short-term : CPU를 할당해서 작업을 실행시킬 Process 선택
- CPU 이용량 효율성 증대를 위해 CPU는 작업 중이던 것을 한 번에 끝내지 않고 하드 디스크로 보내놓고 다른 작업을 수행한다. 약간의 시간이 흐른 후 다시 메모리로 작업을 올린 후 다시 CPU는 작업을 재개한다. 이런 식으로 CPU가 최대 효율로 여러 작업을 처리할 수 있도록 한다. 이게 Swap In/Out Memory/Disk이다.
→ Medium-Term Scheduling
- Short-term은 CPU 효율성을 위해 빠르고 보다 자주 일어난다.
- Long-term은 CPU와 직접적인 연관이 없기 때문에 덜 일어나고 비교적 느리게 일어난다.
- Long-term은 Multiprogramming degree를 제어한다.
- Process는 두 가지 방식으로 표현할 수 있다.
- I/O-bound process : I/O 작업이 주된 process
- CPU-boubd process : 연산 작업 같이 CPU가 요구되는 작업이 주된 process
-> 시간 흐름에 따른 CPU 이용량을 통해 구분할 수 있다.
- Process는 Children Process를 만들어낼 수 있고, 이를 크게 보면 트리 형태로 보인다.
- 자원 공유 측면
- Parent & Children가 모든 자원을 공유할 수 있다.
- Parent & Children가 부분적으로 자원을 공유할 수 있다.
- Parent & Children가 모든 자원을 공유하지 않는다.
- 실행 측면
- Parent & Children 동시에 진행할 수 있다.
- Parent Process는 Children Process가 끝날 때까지 기다릴 수도 있다.
- Address Space
- Child와 Parent가 복제된 공간, 같은 메모리를 함께 사용하면 프로그램과 Data를 공유할 수 있다. fork() system call만 수행
- Child가 새로운 공간에 할당하고 프로그램을 load한다. fork() 뿐만 아니라 exec() system call도 수행
- fork() System Call이 호출되는 sudo code
- 자연스럽게 종료하는 것
- 진행 중이던 작업을 parent에게 반납
- 자원을 parent에게 반납
- 강제 종료 (abort)
-> Child process가 할당된 자원보다 초과해서 사용하는 경우
-> Child process에게 부여한 작업이 더 이상 필요 없을 때
-> Parent Process가 종료되었을 때 (= cascading termination)
'CS > OS' 카테고리의 다른 글
[OS] - Thread (0) | 2023.04.12 |
---|---|
[OS] Process (2) : 프로세스 (0) | 2023.04.04 |
[OS] - OS Structure(2) : System Program, Virtual Machine (0) | 2023.03.21 |
[OS] - OS Structure(1) : System Call (4) | 2023.03.18 |
[OS] - OS 소개(2) : OS 구조 및 기능 (0) | 2023.03.12 |