우보천리 개발
[OS] 프로세스와 문맥교환 본문
반응형
프로세스(Process)
프로세스를 간단하게 말하자면 실행중인 프로그램이다.
그렇다면 실행중인 프로그램은 무엇인가?
실행중인 프로그램은 디스크에 있는 프로그램이 메모리에 적재가 되어 운영체제의 제어를 받는 상태라고 할 수 있다.
즉 자신만의 주소공간이 생성되어 있다는 뜻이기도 한다.
프로세스의 메모리 구조
스택 |
힙 |
데이터 |
코드 |
- 스택 : 지역변수에 사용, 호출한 함수의 반환 값, 반환 주소, 매개변수 등에 사용. 스택은 함수를 호출하면 쌓이고 반환되면서 줄어든다. 스택은 힙 쪽으로 커지고, 스택 포인터와 만나면 메모리가 소진되었다는것.
- 힙 : 동적으로 메모리 할당할 수 있음.
- 데이터 : 전역변수, 정적변수 저장하고 프로그램 실행전에 초기화한다.
- 코드 : 실행 명령을 포함한 프로그램 영역.
프로세스의 상태 변화
- 준비 : 준비상태인 프로세스는 CPU의 사용을 기다리고 있는 것이다. 즉 메모리에 적재가 되어 있다는 것이고, CPU를 할당받기만을 기다리는 것이다.
Ready Queue 맨 앞에 있는 프로세스가 CPU를 점유하는 것을 Dispatch라고 하고 할당 받으면 실행한다 - 실행 : CPU를 할당받아 실행중인 프로세스이다. 운영체제는 하나의 프로세스가 CPU 사용의 독점을 막기 위해서 시간을 할당하고, 해당 시간이 끝나면 Time-out이 발생하며 준비상태로 된다.
- 대기 : Time-out이 발생하기 전에 I/O 또는 이벤트를 기다려야한다면(즉 오래 걸리는 작업들) CPU를 놔주고 대기 상태로 들어간다
- 대기 --> 준비 : I/O or Event가 완료된다면 대기에서 준비상태로 전환한다.
프로세스의 문맥 교환(Process Context Switching)
문맥이란 현재 프로세스의 상태이다.
3가지로 나누어서 볼 수 있는데 1. 하드웨어상의 문맥, 2. 프로세스 주소공간, 3. 커널 자료구조이다.
문맥 교환은 하나의 프로세스에서 다른 프로세스로 CPU를 넘겨주는 것이다.
CPU를 넘겨주기에 앞서서 현재 실행중인 프로세스에 대한 정보를 저장해야한다. 그래야 다시 CPU를 할당 받았을 때 처음부터 실행하지 않기 때문이다.
운영체제는 이러한 정보를 PCB(Process Control Block)에 저장한다.
PCB는 프로세스가 생성되면 생성된다.
프로세스 식별자 |
프로세스 상태(생성,준비,실행..등) |
프로그램 카운터 |
레지스터 저장영역 |
프로세서 스케줄링 정보 |
입출력 상태정보 메모리 관리 정보 |
계정 정보... |
PCB는 위와 같은 정보를 저장한다.
문맥 교환 과정
1. 실행중인 프로세스에서 Time-out 혹은 I/O 인터럽트가 들어온다
2. 운영체제는 현재 실행중인 프로세스A의 상태정보를 PCB에 저장한다
3. 다음 실행할 프로세스의 상태를 적재한다
프로세스의 문맥교환은 많은 오버헤드가 발생한다
반응형
'Computer Science > 운영체제' 카테고리의 다른 글
[OS] DeadLock (0) | 2023.05.25 |
---|---|
[OS] 스케줄링 알고리즘 (0) | 2023.05.17 |
[OS] 프로세스 스케줄링 (0) | 2023.05.16 |
[OS] 프로세스 생성과 협력 개요 (0) | 2023.05.15 |
[OS] Thread, Multi-Process, Multi-Thread (1) | 2023.05.13 |
Comments