프로세스
프로세스란?
- 실행중인 프로그램을 뜻한다.
- 다음과 같은 것들을 갖고 있다
- 코드 영역 (Text Section)
- 프로그램 카운터(PC)
- 스택 영역
- 힙 영역
- 데이터 영역
- 프로세스는 2가지의 종류로 나타내어진다
- I/O Bound Process - I/O 작업을 하는데 더 많은 시간을 쓰는 프로세스
- CPU Bound Process - 계산 작업을 하는데 더 많은 시간을 쓰는 프로세스
프로세스 상태
프로세스의 시작으로부터 끝날 때까지 고유의 상태가 존재한다.
- New: 프로세스가 생성됨
- Running: 프로그램내의 명령어들이 실행 중
- Waiting: 프로세스가 어떤 이벤트의 발생에 의해 대기 중임
- Ready: 프로세스가 CPU를 할당 받을 준비가 되어 대기 중임
- Terminated: 프로세스를 마쳐 종료함
PCB (Process Control Block)
프로세스와 관련된 정보들의 집합
- 프로세스 상태
- 프로그램 카운터 - 다음 실행 될 명령어의 위치
- CPU 레지스터
- CPU 스케줄링 정보
- 메모리 관리 정보
- 사용량 정보
- I/O 상태 정보
PCB는 프로세스마다 다를 수 있는 모든 정보의 저장소 역할을 한다.
프로세스 스케줄링
컴퓨터는 한정된 자원을 갖고있다. 하지만 여러 프로세스를 실행하려고 한다. 이 떄문에 여러 프로세스의 실행 순서를 운영체제가 중재해주는 것을 Scheduling이라고 한다.
스케줄링을 통해 CPU 사용량을 최대화시켜 프로그램 실행 효율성을 가져볼 수 있다.
프로세스 스케줄러는 이용 가능한 프로세스를 고른다.
스케줄링은 순서를 정하는 것이므로 Queue를 통해 프로세스 스케줄링을 유지한다.
- Job Queue - 메모리에 올라갈 준비가 되있는 작업(프로세스)를 저장한다.
- Ready Queue - CPU를 할당 받을 준비가 되있는 프로세스들이 대기하는 Queue이다.
- Device Queue - Device마다 존재하며, Device를 Access 하고자 하는 프로세스를 저장한다.
프로세스들은 위와 같은 Queue들을 옮겨다니며 실행된다,
스케쥴러
- Short-Term Scheduler (CPU Scheduler)
- Ready Queue에 있는 프로세스 중 어떤 것을 CPU에 할당해 줄 것인지를 정하는 스케쥴러이다.
- CPU에 할당해주어야 하기 때문에 빈번하게 동작한다.
- Long-Term Scheduler (Job Scheduler)
- 사용자가 제출한 Job에서 어떤 것을 먼저 Ready Queue에 올릴 지 정하는 스케줄러이다.
- Short-Term Scheduler 보단 빈번하게 동작하진 않는다.
- CPU작업, I/O 작업의 빈도를 잘 조절해야한다. -> 그래야 휴무 없이 효율적으로 사용할 수 있다.]
Context Switch
한 프로세스를 실행하고 있는 CPU가 다른 프로세스로 교체하고자 할 때, 시스템은 기존 프로세스의 상태를 저장해야하고 새로운 프로세스의 상태를 불러와야 한다.
프로세스 스케줄링에서 프로세스를 계속해서 바꿔주는 일련의 과정을 Context Swithcing이라고한다.
현재 프로세스의 PC와 SP 등 정보를 저장하는 작은 공간을 Process Control Block(PCB)가 있다.
PCB에는 Process ID(PID), 레지스터(PC, SP 등)들을 포함해 프로세스가 실행 중인 상태 정보를 저장한다.
이 PCB를 사용해 프로세스의 상태를 관리하며 Context Switching을 하게 된다.
단, Context Switching은 오버헤드가 있다. 그렇기 때문에 너무 많은 Switching이 발생하면 실행 시간이 늘어나는 상황이 발생할 수 있다.
이와 같은 상황은 HardWare Supporting으로 해결할 수도 있는데, 외부 장치에 의해 영향을 받다보니 유연성이 떨어질 수 있다.
사진 출처: Provided by Operating Systems Concepts, 10th Edition (Abraham Silberschatz, Peter Baer Galvin, Greg Gagne)
'CS > OS' 카테고리의 다른 글
[OS] 6 - CPU Scheduling (1) (0) | 2024.08.23 |
---|---|
[OS] 5 - Thread (0) | 2024.08.06 |
[OS] 4 - 프로세스 간 통신 (0) | 2024.07.20 |
[OS]2 - 핵심 컴포넌트 (0) | 2024.06.17 |
Operating System basic (1) | 2024.04.22 |