2024. 4. 27. 01:41ㆍCS/운영체제
📌프로그램, 프로세스, 스레드
프로그램은 설치하여 2차 메모리에 저장된다.
설치된 프로그램을 실행하면 프로세스가 생성된다. 그리고 각각의 프로세스는 PID를 가지게 된다.
스레드는 프로세스 속에 존재하는 실행단위이다. 즉, 프로세스가 관리의 단위라면 스레드는 실행의 단위이다.
스레드는 프로세스에게 할당된 자원을 공유한다.
프로세스 제어블록(PCB)
모든 프로세스가 동시에 CPU를 사용할 수 없다. 타이머 인터럽트(타임아웃 인터럽트)가 발생하면 자신의 차례를 양보하고 다음 차례를 기다린다.
운영체제는 이러한 실행순서를 관리하며 프로세스에게 CPU를 비롯한 자원을 배분한다. 이를 위해 PCB를 사용한다.
PCB는 태그와 비슷하다. 운영체제는 커널 영역에 생성된 PCB를 통해 특정 프로세스를 식별하고 프로세스를 처리하는데 필요한 정보를 판단한다.
새로운 프로세스가 생성되었다는 말은 운영체제가 PCB를 생성했다는 말이고, 프로세스가 종료되었다는 말은 운영체제가 PCB를 폐기한다는 말이다.
그렇다면 PCB는 프로세스의 어떤 정보를 가지고 있을까?
프로세스 ID(PID)
특정 프로세스를 구분하기 위한 고유한 번호이다. 같은 작업을 하는 프로그램일지라도 두 번 실행이 된다면 PID가 다른 두 개의 프로세스가 생성된다.
레지스터 값
PCB에는 프로세스를 실행하면서 사용했던 레지스터 값들이 담겨있다. 그래야지 다시 재실행될 때 이전까지 사용했던 레지스터의 값들을 복원할 수 있기 때문이다.
프로세스 상태
프로세스 상태에는 생성 상태, 준비 상태, 실행 상태, 대기 상태, 종료 상태가 있다. PCB는 이를 저장해둔다.
CPU 스케줄링 정보
프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보도 PCB에 기록된다.
메모리 관리 정보
프로세스마다 메모리에 저장된 위치가 다르기 때문에 PCB는 프로세스가 메모리의 어떤 주소에 저장되어있는지 정보를 가지고 있어야한다. PCB에는 베이스 레지스터, 한계 레지스터, 페이지 테이블 정보가 담긴다.
사용한 파일과 입출력 장치 목록
어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보들이 PCB에 기록된다.
✨문맥 교환
하나의 프로세스 수행을 재개하기 위해 기억해야할 정보를 문맥이라고 한다. 그리고 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어있다.
그림과 같이 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행시키는 것을 문맥 교환(context switching)이라고 한다.
하지만 문맥교환이 자주 일어나면 오버헤드가 발생할 수 있다.
프로세스의 메모리 영역
메모리의 Kernel mode에는 PCB가 생성된다. 그렇다면 User mode에는 프로세스가 어떻게 배치될까?
그림은 메모리 영역 중, Kernel mode에서 사용하는 메모리와 User mode에서 사용하는 메모리를 구분한 것이다.
코드 영역
코드영역(텍스트 영역)은 기계어로 이루어진 명령어가 저장된다. CPU가 실행할 명령어가 담겨있기 때문에 읽기 전용이다.
데이터 영역
데이터 영역에는 잠깐 사용하고 없애는 데이터가 아닌 프로그램이 종료될 때까지 유지되는 데이터가 저장된다.
예시로 전역변수가 있다.
힙 영역
힙 영역을 비유하자면 거실이라고 볼 수 있다. 프로세스 전체에서 사용하는 공간이다.
또한 프로그래머가 직접 할당할 수 있는 저장 공간이다. malloc과 free를 생각하면 된다.
힙 공간을 할당했으면 할당한 공간을 반환해야한다. 그렇지 않으면 메모리 누수가 발생할 수 있다.
스택 영역
스택 영역을 비유하자면 개인 침실이라고 볼 수 있다. 스레드마다 스택이 할당된다.
스택 영역은 데이터 영역과 반대로 일시적으로 데이터를 저장하는 공간이다. 일시적으로 저장할 데이터가 PUSH되고, 더이상 필요하지 않은 데이터는 POP됨으로써 스택 영역에서 사라진다.
예시로 매개 변수, 지역 변수가 대표적이다.
코드 영역과 데이터 영역은 크기가 변하지 않는다. 따라서 해당 영역들을 정적 할당 영역이라고 부른다.
반면에 힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에 동적 할당 영역이라고 부른다.
그래서 일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당된다. 그래야만 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당되는 주소가 겹치는 일이 없다.
'CS > 운영체제' 카테고리의 다른 글
CPU 스케줄링 알고리즘 (2) | 2024.05.02 |
---|---|
CPU 스케줄링 개요 (0) | 2024.05.02 |
스레드 (0) | 2024.05.02 |
프로세스 상태와 계층 구조 (0) | 2024.05.01 |
✨운영체제의 큰 그림 (0) | 2024.04.24 |