1. 프로세스 개요
- 프로세스의 생성 과정 : 프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리일 뿐이지만, 보조기억 장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다.
- 포그라운드 프로세스 : 사용자가 보는 앞에서 실행되는 프로세스
- 백그라운드 프로세스 : 사용자가 보지 못하는 뒤에서 실행되는 프로세스(데몬[유닉스]혹은 서비스[윈도우]라고 부른다)
- 프로세스 제어 블록(PCB) : 프로세스가 생성될 때 커널 영역에 생성되는 프로그램으로 프로세스와 관련된 정보를 저장하는 자료 구조이다.
프로세스를 식별하기 위해 꼭 필요한 정보들이 저장되며, 프로세스의 실행 순서를 관리하고 CPU를 비롯한 자원을 배분해준다. - PCB에 담기는 정보
- 프로세스ID(PID) : PID는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호이다.
- 같은 일을 수행하는 프로그램이라 할지라도 두번 실행하면 PID가 다른 두 개의 프로세스가 생성된다.
- 레지스터 값 : PCB안에는 프로세스가 실행하며 사용했던 프로그램 카운터같은 레지스터 값들을 담아두고, 다시 자신의 실행 차례가 돌아오면 이전까지 진행했던 작업들을 그대로 이어 수행하기위해 이전까지 사용했던 레지스터의 중간값들을 모두 복원한다.
- 레지스터 : CPU 내에 있는 작은 저장 장치로, 계산과 데이터 처리, 명령어 실행에 필요한 중요한 값을 일시적으로 저장하는 역할을 해준다.
- 프로세스 상태 : 현재 프로세스가 입출력장치를 사용하기 위해 기다리고 있는 상태인지, CPU를 사용하기 위해 기다리고 있는 상태인지, 아니면 CPU를 이용하고 있는 상태인지 등의 프로세스 정보가 저장된다.
- CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보가 PCB에 기록된다.
- 메모리 관리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 저장되어있다.
- 사용한 파일과 입출력장치 목록 : 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용하면 PCB에 해당 내용이 명시됩니다. 즉, 어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보들이 PCB에 기록된다.
- 프로세스ID(PID) : PID는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호이다.
- 문맥(Context) : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보 즉, PCB에 기록되는 정보
- 문맥 교환(Context swtiching) : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
- 오버헤드 : 한 프로세스가 실행을 종료하고 다른 프로세스가 실행을 시작할 때 발생하는 시간적 비용 또는 자원의 낭비를 의미
- 사용자 영영에서의 프로세스
- 정적 할당 영역 : 크기가 고정된 영역
- 코드 영역 : 데이터가 아닌 CPU가 실행할 기계어로 이루어진 명령어가 저장되며 읽기 전용(read-only)공간
- 데이터 영역 : 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
- 동적 할당 영역 : 크기가 변할 수 있는 영역
- 힙 영역 : 프로그래머가 직접 할당할 수 있는 저장 공간
- 메모리 누수 : 할당한 메모리를 반환하지 않아 메모리 낭비를 초래 하는 것
- 스택 영역 : 데이터를 일시적으로 저장하는 공간
- 주소 할당 : 힙 영역은 낮은 주소에서 높은 주소로, 스택 영역은 높은 주소에서 낮은 주소로 할당
- 힙 영역 : 프로그래머가 직접 할당할 수 있는 저장 공간
- 정적 할당 영역 : 크기가 고정된 영역
2. 프로세스 상태와 계층 구조
- 프로세스가 가질수 있는 대표적인 상태
- 생성 상태(new) : 이제 막 메모리에 적재되어 PCB를 할당받은 상태
- 준비 상태(ready) : 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태
- 디스패치 : 준비 상태인 프로세스가 실행 상태로 전환되는 것을 의미한다.
- 실행 상태(running) : CPU를 할당받아 실행 중인 상태
프로세스가 할당된 시간을 모두 사용한다면 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하여 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다. - 대기 상태(blocked) : 입출력장치의 작업을 기다리는 상태(특정 이벤트가 일어나길 기다리는 상태)
- 종료 상태(terminated) : 프로세스가 종료된 상태
프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.
- 프로세스 계층 구조 : 프로세스가 프로세스를 낳는 계층적인 구조
- 프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.
- 부모 프로세스 : 새 프로세스를 생성한 프로세스
- 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
- 프로세스 생성 기법
- 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성해내고, 만들어진 복사본은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.
- fork : 자기 자신 프로세스의 복사본을 만드는 시스템 호출
- exec : 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출
3. 스레드
- 스레드(Thread) : 프로세스를 구성하는 실행의 흐름 단위
- 특징 : 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.
스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행된다. - 단일 스레드 프로세스 : 실행의 흐름 단위가 하나인 프로세스
- 멀티 프로세스 : 프로세스를 동시에 실행하는 것
- 멀티 스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것
- 장점 : 메모리를 더 효율적으로 사용할 수 있다.
프로세스의 자원을 공유하기 때문에 서로 협력과 통신에 유리하다. - 단점 : 모든 스레드가 프로세스의 자원을 공유하기때문에 하나의 스레드에 문제가 생기면 다른 스레드도 영향을 받는다.
- 장점 : 메모리를 더 효율적으로 사용할 수 있다.
'OS' 카테고리의 다른 글
6. 가상 메모리(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.20 |
---|---|
5. 교착 상태 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.19 |
4. 프로세스 동기화 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.18 |
3. CPU 스케줄링 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.14 |
1. 운영체제란? - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.05 |