PCB (Process Control Block)
: 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓은 곳
-> 프로세스의 상태 정보를 저장하는 구조체
- 프로세스 상태 관리와 문맥 교환(Context Switching)을 위해 필요함
- PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지됨
- 하나의 프로세스가 시스템에 존재할 때의 모습
- 운영체제가 프로세스를 관리한다는 것은 PCB의 생성, 수정, 리스트 연결, 지우는 등의 행위
1) PCB에 포함되는 정보들
- Process ID : 프로세스를 구분하는 ID
- Process state : 각 state들의 상태를 저장
- Program Counter : 다음 Instruction의 주소를 저장, CPU는 이 값을 참조해서 Process의 Instruction을 수행
- Register : Accumulator, CPU Register, General Register 등을 포함
- CPU Scheduling Information : 우선 순위, 최종 실행 시간, CPU 점유 시간 등이 포함
- Memory Information : 해당 프로세스 주소 공간(lower bound ~ upper bound) 정보를 저장
- Process Information : 페이지 테이블, 스케줄링 큐 포인터, 소유자 부모 등
- Device I/O Status : 프로세스에 할당된 입출력 장치 목록, 열린 목록 등
- Pointer : 부모 / 자식 프로세스에 대한 포인터, 자원에 대한 포인터 등
- Open File List : 프로세스를 위해 열려있는 파일의 리스트
2) Context Switching에서의 PCB 역할
- Context Switching
: 수행 중인 프로세스를 변경할 때 레지스터에 프로세스의 정보가 바뀌는 것
- CPU가 이전의 프로세스 상태를 PCB에 보관 -> 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정
- PCB는 저장소가 아닌 저장 단위 -> 데이터를 잠시 보관하는 것
프로세스(Process)
: 디스크에서 메모리에 올라오는 단위 (자원의 소유자)
- 정적 프로그램이 운영체제의 PCB를 받아, 메인 메모리에 적재된 동적인 상태
프로그램 vs 프로세스 vs 프로세서
▶ 프로그램(Program)
: 소프트웨어의 한 가지로써 어떤 문제를 해결하기 위해서 그 처리 방법과 순서를 기술하여 컴퓨터에 주어지는 일련의 명령문 집합체
-> 사용자의 명령에 반응하는 소프트웨어
- 디스크에 이진 파일로 존재하다가 사용자가 실행시키면 메모리로 쌓여서 실행됨
- 컴파일한 코드와 여러 변수들이 모인 정적인 개체
▶ 프로세스(Process)
: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
-> 메모리에 적재되어 있는 프로그램
- 메모리 구조를 이루고 PC나 레지스터처럼 현재 어떤 자원을 사용하는 동적인 개체
▶ 프로세서(Processer)
: 프로그램들이 실행될 수 있도록 해주는 하드웨어
-> 컴퓨터의 CPU
- 프로세스는 수행 중인 프로그램
- execution : 프로그램과 실행에 필요한 값들이 표현되어 커널에 등록되어 있음
- 프로그램과 데이터를 기본으로 정상적인 실행을 위해 필요한 환경을 시스템으로부터 부여받은 능동적인 존재
프로세스의 상태 변화
- 프로세스가 만들어져 시스템에 존재하는 동안 여러 사건들에 의해 일련의 상태 변화를 거침
Active State vs Suspended State
▶ Active : 메모리 공간의 일정량을 부여받은 상태
▶ Suspended : 메모리가 회수된 상태
- Active ↔ Suspended : Swapping
- A -> S : Swap out
- S -> A : Swap in
- Swapping도 결국은 입출력이기 때무에 발생하는 횟수가 적으면 좋음
1. Created (생성)
- 사용자가 요청한 작업이 커널에 등록되고 PCB가 만들어져 프로세스가 만들어진 상태
- Created -> Ready : 메모리 공간을 검사하여 충분한 공간이 있으면 메모리를 할당하고 준비 상태로 바꿈
- Created -> Suspended Ready : 공간이 없으면 메모리를 할당하지 않고 보류 준비로 바꿈
2. Ready (준비)
- CPU를 할당받기 위해 기다리고 있는 상태 -> CPU만 주어지면 바로 실행할 준비가 된 상태
- Ready -> Running (Dispatch) : CPU를 할당 받으면 실행 상태로 바뀌고 실행됨
- Ready -> Suspended Ready : 준비 상태였다가 메모리를 뺏긴 상태
3. Running (실행)
- CPU를 할당바다 실행 중인 상태
- Running -> Ready (Timeout) : CPU를 받아 실행하다가 시간 할당량을 소진하여 뺏긴 상태
- Running -> Blocked : 실행 상태의 프로세스가 입출력이 필요하게 되어 시스템 호출을 하고, 입출력 처리의 종료를 기다리는 상태 -> 이때 CPU는 바로 준비 상태의 프로세스 하나를 선택해 실행
4. Blocked (대기)
- 프로세스가 실행되다가 입출력 처리를 요청하거나, 바로 확보될 수 없는 자원을 요청하면 CPU를 양도하고 요청한 일이 완료되기를 기다림
- Blocked -> Ready : 입출력이 완료되어 CPU 할당을 기다리는 상태
- Blocked -> Suspended Blocked : 메모리의 여유 공간 확보를 위해 대기 상태에서 메모리를 뺏겨 보류 대기 상태로 바뀜
5. Terminated (종료)
- 프로세스가 종료될 때 아주 잠시 거치는 상태
- 모든 자원이 회수되고 PCB를 삭제함
6. Suspended Ready
- 생성된 프로세스가 바로 메모리를 받지 못할 때, 준비 또는 실행 상태에서 메모리를 잃게 될 때
- 충분한 메모리 공간의 확보를 위해 준비 상태의 프로세스를 보류시키는 경우
- Running -> Suspended Ready : 높은 우선 순위의 보류 대기 상태 프로세스가 준비 상태가 되어, 실행 상태의 프로세스로부터 CPU를 뺏는 경우
- Suspended Blocked -> Suspended Ready : 보류 대기 상태에 있던 프로세스가 기다리던 입출력이 완료된 경우
- Suspended Ready -> Ready : 다시 메모리를 받은 경우
7. Suspended Blokcked
- 대기 상태일 때 메모리 공간을 잃은 상태
- Blocked -> Suspended Blocked : 메모리 공간 확보를 위해 메모리를 잃은 상태, 준비 상태인 플세스가 아예 없는 경우 발생하기도 함
- Suspended Blocked -> Blocked : 메모리가 확보되어 대기가 된 경우
- Suspended Blocked -> Suspended Ready : 입출력이나 기다리던 사건이 종료된 경우
DMA (Direct Memory Access)
: CPU 개입 없이 메모리에 접근하는 기법
- CPU의 개입없이 주변 장치(입출력 장치)와 주기억장치와의 데이터 전송이 이루어지는 방법을 통칭
- CPU와 주기억장치만이 시스템 버스에 접근할 수 있고 입출력장치는 DMA와 같은 입출력 제어기에 의해 시스템 버스에 접근할 수 있음
- 프로그램 수행 중 입출력을 위한 인터럽트의 발생 횟수를 최소화하여 컴퓨터 시스템의 효율을 높임
- CPU는 DMA와 상태 정보 및 제어 정보만을 주고 받음
- 속도가 빠른 디스크, 테이프 등에 사용됨
- DMA는 기억 장치 접근을 위해 CPU의 시스템 버스 사용권을 일시적으로 뺏는 사이클 스틸링(Cycle Stealing)을 수행하기 때문 -> 시스템 버스에 대해 CPU보다 DMA의 우선 순위가 높음
- 실제 CPU가 Control하는 건 DMAC(DMA Control)을 Control 해주는 과정을 의미
제어 방식 | CPU 관련 여부 | 특징 |
Programmed에 의한 I/O | O | 가장 원시적인 방법 |
Interrupt에 의한 I/O | O | |
DMA에 의한 I/O | X | 소형 컴퓨터에서 이용 |
Channel에 의한 I/O | X | 대형 컴퓨터에서 이용 |
- 빠른 순위 : Channel > DMA > Interrupt > Programmed
1. 프로그램에 의한 I/O
- CPU상에서 실행되는 프로그램에 의해 입출력이 직접 제어
- CPU는 입출력 장치에 명령을 보낸 후 동작이 완료될 때까지 대기
- CPU는 주기적으로 주변 장치의 상태를 반복적으로 검사 -> 폴링 방식
- CPU는 자원 낭비 발생
2. 인터럽트 처리에 의함 I/O
- 입출력 인터페이스가 주변 장치의 상태를 검사하여 준비 상태가 되면 인터럽트 신호를 발생하여 입출력 처리를 요구하는 방식
- CPU는 그 전에 수행되던 프로그램의 상태를 스택에 저장한 후 Context Switching 과정을 통해 인터럽트 서비스 프로그램 수행
- 주변 장치에 명령을 보낸 후 주변 장치로부터 결과가 올 때까지 CPU는 다른 작업을 수행할 수 있으므로 효율성 증가
- 프로그램에 의한 I/O 문제점 개선
3. 메모리 직접 접근에 의한 I/O
- 인터럽트 방식이 프로그램에 의함 입출력 방식보다는 효율적이지만 입출력을 위한 상태 정보, 제어 정보, 데이터 전송을 위해서는 여전히 CPU의 능동적인 개입이 요구된
- CPU는 상태 정보, 제어 정보만을 교환하게 하고 데이터 전송은 주변 장치와 주기억장치 간에 직접적으로 교환하게 하는 방식이 더 효율적
- DMA를 사용하기 위해서는 시스템 버스 상에 모듈이 하나씩 추가
- DMA 모듈은 CPU를 통하지 않고 한 번에 한 단어씩 직접 기억장치로부터 모든 데이터 블록을 전송
- 전송이 완료되면 DMA모듈은 CPU에게 인터럽트 신호를 보내고 CPU는 전송의 시작과 끝 부분에만 관여
4. 채널에 의한 I/O
- DMA 개념을 확장하여 구현한 입출력만을 위한 전용 처리 장치
- CPU처럼 독자적으로 주기억장치에 저장된 명령어를 처리할 수 있는 능력
- 입출력 채널은 CPU의 개입없이 입출력 처리를 수행
- 2가지 종류의 채널
Context Switching
: CPU / 코어에서 실행 중이던 프로세스 / 스레드가 다른 프로세스 / 스레드로 교체되는 것
- Context : 프로세스 / 스레드의 상태
- 커널(Kernel)에 의해서 수행됨
- 커널 : 각종 리소스를 관리 / 감독하는 역할을 하는 존재
- 필요한 이유
- 여러 프로세스와 스레드들을 동시에 실행시키기 위해 -> 그렇게 보이기 위해
- 여러 프로세스와 스레드들이 공정하게 CPU 시간을 나눠 갖기 위해
- 높은 우선 순위의 작업이 빠르게 처리될 수 있게
- 발생하는 시점
- 주어진 Time Slice(Time Quantum)를 다 사용함
- I/O 작업을 해야 함
- 다른 리소스를 기다려야 함
- Interrupt
- 미치는 영향
- 캐시 오염 발생 : 사용할 것이라고 예상을 하고 캐시에 데이터나 값을 저장한 캐시 데이터가 의미가 없어짐
- 오버헤드 발생
Reference
https://naeunbi698.tistory.com/195
DMA(Direct Memory Access) 개념
[운영체제] DMA(Direct Memory Access) & 입출력 처리 방식 CPU 개입없이 메모리 접근하는 기법 CPU를 대신하여 I/O장치와 Memory사이의 데이터전송을 담당하는 장치를 지칭 CPU의 개입 없이 주변장치(입출력
naeunbi698.tistory.com
프로세스란? 프로세스의 상태
이 포스팅에서 다루는 내용 : 프로세스, PCB, 프로세스의 상태와 변화, 활성 vs 보류 상태, 생성, 준비, 실행, 대기, 종료, 보류 준비, 보류 대기
velog.io
https://dev-mystory.tistory.com/119
운영체제 - PCB(Process Control Block)란?
PCB란?운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.프로세스 상태 관리와 문맥교환(Context Switching)을 위해 필요하다.PCB는 프
dev-mystory.tistory.com
'운영체제' 카테고리의 다른 글
7. Context Switching(문맥 교환) (0) | 2025.01.23 |
---|---|
6. 시스템 콜(System Call) (0) | 2025.01.23 |
5. 인터럽트(Interrupt) (0) | 2025.01.16 |
4. CPU 스케줄링 알고리즘 (0) | 2025.01.16 |
3. 프로세스와 스레드 (0) | 2025.01.16 |