어느덧 프로세스이다. 운영체제는 정말 외워야 할 과목이 많은 것 같다.
짚고 가야할 부분 3가지
- 프로세스 개념
- 프로세스 구조
- 프로세스 생성과 계층 구조
1. 프로세스
1. 프로세스의 개념
프로세스는 실행 파일이 메모리에 로딩되어 실행되는 상태이다. 반드시 메모리에 올라가야 실행될 수 있다. 그 외에도 이렇게 정의된다.
- 주기억 장치에 상주된 프로그램이 CPU에 의해 처리되는 상태
- CPU에 의해 현재 실행되고 있는 프로그램
- PCB의 존재로서 명시되는 것
- 프로세서가 할당되는 개체로서 디스패치가 가능한 단위
를 프로세스라 한다. 그럼 현대 운영체제 방식인 다중 프로그래밍 방식에서 프로세스를 살펴보자.
2. 다중 프로그래밍 방식에서의 프로세스
우리가, 컴퓨터나 휴대폰을 볼 때 한 가지 프로그램만을 띄워놓지는 않을 것이다. 나도 현재 크롬 창만 띄워진게 아니라 카카오톡 화면이나 다른 프로그램들이 띄워져 있다. 이처럼 여러 프로그램을 돌리기 위한 여러 프로세스들이 메모리에 동시에 있을 수 있다.
또한, 하나의 프로그램은 여러 프로세스가 될 수 있다. 이를 다중 인스턴스라고 한다. 예를 들어, 메모장을 띄워놓은다고 할 때 메모장의 Notepad 프로세스가 여러 개 가지고 있을 수 있다는 것이다. 각 프로세스는 독립된 메모리 공간을 가지고 별개의 프로세스로 취급된다.
3. 프로세스의 생명 주기
1. 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태이다. (+PCB)
2. 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태이다. 실행될 프로세스를 CPU 스케쥴러가 선택한다.
3. 실행 상태 : 선택된 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태이다. 프로세스 사이의 문맥 교환이 일어난다.
4. 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태이다.
5. 완료 상태 : 프로세스가 종료된 상태이다. 비정상 종료와 정상 종료 모두 포함된다.
6. 보류 상태 : 어떠한 이유로 실행이 미뤄지고 메모리에서 쫓겨난 상태 -> 메모리가 꽉차거나 프로그램에 오류가 있거나 입출력이 지연될 때
4. 프로세스 관리
프로세스는 생성에서부터 종료까지 모두 '커널'에 의해 관리된다. 여기서 커널이 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 자료 구조가 있는데 바로 'PCB'이다. 프로세스마다 고유의 PCB가 생성되고 종료되면 폐기된다.
PCB의 구조는 운영체제마다 다르지만 일반적으로는 다음과 같다.
그렇가면, 프로새스는 어떻게 여러 개를 동시에 처리할 수 있을까? 여기서 언급하는 시스템이 시분할 시스템이다. 그렇다면 시간을 할당 했으면 어떤 순서대로 번갈아가며 작업을 하게할 것인가? 이는 스케쥴링 문제인데, 스케쥴링은 나중에 다루게 된다고 한다. 여기서 번갈아 가는 과정을 Context Switching이다.
5. Context Switching
Context Switching은 한 프로세스에서 다른 프로세스로 CPU를 넘겨주는 과정이다. 실행 상태에서 나가는 프로세스는 PCB에 지금까지의 작업 내용을 저장하고 다른 프로세스가 실행이 끝날 때까지 대기한다. 이 과정을 Context Switching이라고 한다.
2. 프로세스 메모리 구조
1. 주소 공간
1) CPU 주소 공간
CPU 주소 공간은 물리 메모리 주소라고도 한다. CPU 주소 공간은 CPU 버스의 크기에 따라 달라지고 이는 곧 CPU 아키텍쳐 크기랑도 같은 말이다. 주소 공간은 0번지에서부터 시작하며, 1번지의 저장 공간 크기는 1바이트이다.
2) 프로세스 주소 공간
프로세스 주소 공간은 프로세스가 실행 중에 접근할 수 있도록 허용된 주소의 최대 범위이다. 프로세스 관점에서 보자면, '가상 메모리'라는 개념이 적용되며, 이는 프로세스가 자신이 CPU 전체 공간을 할당받은 것 처럼 보인다는 것이다. 프로세스 주소 공간은 2 부분으로 나뉘어진다. (사용자 공간, 커널 공간)
그래서 그려보면 이렇다!
근데 왜 이렇게 나눴을까?
1) 코드 영역 : 코드는 바뀔 일이 없기 때문에 오로지 읽기만 수행한다. 여기서 코드 영역을 공유하면 메모리 사용량을 줄일 수 있다.
2) 데이터 영역 : 변수가 저장되는 영역으로 프로그램이 구동되는 동안에는 항상 접근 가능해야 한다. 이를 위해선 독립적인 영역이 필요함
3) 힙 영역, 스택 영역에서 자라나는 방향이 다른 이유 : 얼마나 할당받을지 모르기 때문
4) 스택 영역 : 함수의 호출 순서와 반환 대상의 관리가 용이하다. (CallStack)
다음에 이어서..!
'CS 전공 > OS' 카테고리의 다른 글
[운영체제] 6. 스케줄링 (2) | 2024.04.21 |
---|---|
[운영체제] 5. 쓰레드 (1) | 2024.04.20 |
[운영체제] 4. 프로세스 (2) (2) | 2024.04.18 |
[운영체제] 2. 컴퓨터 아키텍쳐와 운영체제 (0) | 2024.04.16 |
[운영체제] 1. 운영체제 개요 (0) | 2024.04.15 |