1. 문맥교환(Context switching)
CPU를 다른 프로세스로 넘기는 작업이다.
실행이 정지되는 프로세스 문맥은 보존되고, 새로 실행되는 프로세스의 문맥이 활성화된다.
사용자 수준 문맥은 메모리에 남아 있으나(원래 메모리에 존재), CPU에 있던 레지스터의 내용들은 추후의 복구를 위해 저장(save)되고, 스케줄링된 새로운 프로세스의 문맥이 적재(store)된다.
프로세스 제어 블록(PCB, Process Control Block)
프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료 구조이다. 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장된다.
01 비자발적 문맥교환 시점
1) 시분할 기반의 스케줄링(타임 슬라이스 소진으로 인한 스케줄링)에 의한 경우
2) 인터럽트로 인해 CPU 선점 당했을 때
02 자발적 문맥교환 시점
1) 프로세스 스스로 입출력 요청
프로세스가 입출력 작업을 수행할 때 해당 작업을 기다리는 동안 다른 프로세스에게 양보할 수 있다. 이때 프로세스는 스스로 CPU를 반납하고 입출력 작업을 기다리는 상태로 전환된다.
2) 다른 프로세스가 보낼 시그널에 대한 대기 요청을 하여 CPU를 반납할 때
프로세스가 다른 프로세스로부터 시그널을 받을 때까지 대기하는 경우가 있다. 예를 들어 프로세스 간 통신을 위해 사용되는 시그널이 있다. 프로세스가 시그널을 기다리는 동안 CPU를 양보하고 대기 상태로 전환된다.
2. 프로세스의 상태
01 생성(new)
프로세스가 생성된 상태
02 준비(ready)
CPU의 배정을 기다리면서 스케줄링(준비큐를 선택하여 CPU가 할당됨에 따라 타임슬라이스가 배정된다.)에 의하여 언제든지 실행이 될 수 있는 상태
준비리스트 또는 준비큐(first in - first out)에 기다리고 있게 된다.
준비 상태로 transition되어 오는 경우들
- 프로세스 생성 후 선정되어 CPU 할당을 대기하는 경우
- 프로세스가 실행되던 도중에 비자발적인 문맥교환이 일어났을 경우
● CPU의 독점 방지를 위해서 타임 슬라이스 소진한 상태에 발생
● 인터럽트 발생으로 커널이 CPU를 회수하고 프로세스를 일시 중지시킨 상태에 발생
- 대기 하고 있던 입출력 또는 시그널 사건이 완료 된 경우
03 실행(running)
CPU에 의해 프로세스를 수행하는 상태
CPU를 회수 당하거나 반납할 때까지 실행 상태에 있게 된다.
● 회수 당할 경우 실행 → 준비
● 반납할 경우 실행 → 대기
프로세스의 실행 모드
사용자 모드 실행(user mode running) : 사용자나 라이브러리 코드(프로세스의 텍스트 영역)가 실행되고 있는 상태
커널 모드 실행(kernal mode running 또는 system mode running) : 프로세스가 시스템 호출(트랩)을 하여 커널 내부로 진입하여 커널의 코드부분이 실행되는 상태
04 대기(blocked)
프로세스가 어떤 사건이 발생하기를 기다리고 있는 상태
- 사용자 프로세스가 시스템 호출을 통한 입출력 요구나, 사건 발생 대기 중에는 CPU에 의하여 수행될 필요가 없으므로 반납 된다.
● CPU 반납 후 입출력 완료 또는 사건 발생 시까지 대기
● 사건의 종류별로 구성된 대기 리스틑(wait queue 또는 sleep queue)로 이동
● 사건 발생 시, 사건 완료 시 에는 준비 상태(ready queue)로 transition
- 대기 상태 중에도 I/O는 진행된다.
- CPU와 I/O를 overlap 할 수 있는 기반이 된다.
05 종료(terminated)
프로세스가 종료된 상태
'cs공부 > 운영체제' 카테고리의 다른 글
운영체제 - 캐시(Cache)이론 (0) | 2023.05.02 |
---|---|
운영체제 - 쓰레드(Thread), 기아상태,쓰레드풀(Thread Pool) (0) | 2023.04.28 |
운영체제 - 프로세스(Process) (0) | 2023.04.28 |
C# - 운영체제 쓰레드 코드(ThreadPool, Task 등) (0) | 2023.04.27 |
운영체제 - 메모리 배리어(MemoryBarrier) (0) | 2023.04.27 |
댓글