10-1. 프로세스 개요
- 보조기억 장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다. 이 과정을 프로세스를 생성한다라고 표현
프로세스 직접 확인하기
- 포그라운드 프로세스 : 사용자가 보는 앞에서 실행되는 프로세스
- 백그라운드 프로세스 : 사용자가 보지 못하는 뒤편에서 실행되는 프로세스
- 백그라운드 프로세스: 사용자와 직접 상호작용
- 데몬/ 서비스 : 사용자와 상호작용하지 않는 백그라운드 프로세스
프로세스 제어 블록
- CPU자원은 한정되어 있기 때문에 프로세스들은 차례대로 돌아가며 한정된 시간 만큼만 CPU를 이용.
- 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원 배분.
- 프로세스 제어 블록 (PCB) : 프로세스와 관련된 정보를 저장하는 자료구조.
- 커널영역에 생성된다.
- PCB로 특정 프로세스를 식별하고 해당 프로세스를 처리하는데 필요한 정보를 판단.
- PCB에 담기는 정보
- 프로세스 ID(PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호.
- 레지스터 값 : 프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원.
- 프로세스 상태 : 현재 프로세스가 어떤 상태인 지 기록. EX) CPU를 사용하기 위해 기다리고 있는 상태인지, 아니면 CPU를 이용하고 있는 상태인 지.
- CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 관리 정보 : 프로세스마다 메모리에 저장된 위치가 다르다. PCB에는 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야 한다.
- 사용한 파일과 입출력장치 목록 : 어던 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열엇는지에 대한 정보들이 PCB에 기록.
문맥 교환
- 문맥 : 중간정보, 즉 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
- 문맥 교환 : 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것.
프로세스의 메모리 영역
- 코드영역(텍스트 영역): 기계어로 이루어진 명령어가 저장. 코드영역은 읽기 전용 공간이다.
- 데이터 영역 : 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간. 대표적으로 전역 변수가 있다.
- 정적 할당 영역 : 코드 영역과 데이터 영역은 크기가 고정된 영역이다.
- 동적 할당 영역 : 힙 영역과 스택 영역은 프로세스 실해과정에서 그 크기가 변할 수 있는 영역이다.
- 힙 영역 : 프로그래머가 직접 할당할 수 있는 저장공간이다. 메모리 공간을 할당 하면 해당 공간을 언젠가는 반환 해야한다. 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래.(메모리 누수)
- 스택 영역 : 데이터를 일시적으로 저장하는 공간. EX) 매개 변수, 지역 변수
10-2. 프로세스 상태와 계층 구조
프로세스 상태
- 생성 상태 : 프로세스를 생성 중인 상태. 이제 막 메모리에 적재되어 PCB를 할당 받은 상태.
- 준비 상태 : 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태.
- 실행 상태 : CPU를 할당받아 실행 중인 상태. 실행 상태인 프로세스는 할당된 일정 시간 동안만 CPU를 사용할 수 있다.
- 대기 상태 : 프로세스는 실행 도중 입출력장치를 사용하는 경우가 있따. 입출력 작업은 CPU에 비해 처리 속도가 느리기에, 입출력 작업을 요청한 프로세스는 입출력장치가 입출력을 끝낼 때까지 기다려야 한다.
- 종료 상태 : 프로세스가 종료된 상태. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리.
프로세스 계층 구조
- 부모 프로세스 : 새 프로세스를 생성한 프로세스
- 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
- 부모 프로세스와 자식 프로세스는 다른 프로세스이기에 각기 다른 PID를 가진다.
- 프로세스 계층 구조
프로세스 생성 기법
- 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다.
- 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성해낸다.
- 만들어진 복사본(자식프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체.
- fork : 자기 자신 프로세스의 복사본을 만드는 시스템 호출
- exec : 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출
필수 문제
1. 다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 1부터 5까지 올바른 상태를 적어 보세요.
10-3. 스레드
- 스레드 : 프로세스를 구성하는 실행의 흐름 단위
프로세스와 스레드
- 단일 스레드 프로세스 : 실행의 흐름 단위가 하나 => 스레드라는 개념이 도입되면서 하나의 프로세스가 한 번에 여러 일을 동시에 처리. 프로세스를 구성하는 여러 명렁어를 동시에 실행.
- 스레드 구성 : 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택 => 프로세스 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원ㅇ르 공유하며 실행된다.
멀티프로세스와 멀티스레드
- 멀티프로세스 : 프로세스를 동시에 실행하는 것.
- 멀티스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것
- 단일 스레드 프로세스 여러 개를 실행하는 것과 하나의 프로세스를 여러 스레드로 실행하는 것의 차이점 : 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다.
'CS공부🖥️ > 운영체제' 카테고리의 다른 글
혼공 컴+운 chapter12. 프로세스 동기화 (0) | 2025.02.05 |
---|---|
혼공 컴+운 chapter11. CPU 스케줄링 (0) | 2025.01.30 |
혼공 컴+운 chapter9.운영체제 시작하기 (0) | 2025.01.27 |
혼공 컴+운 chapter 8. 입출력장치 (0) | 2025.01.22 |
혼공 컴+운 chapter7. 보조기억장치 (1) | 2025.01.22 |