Search

10-1 프로세스 개요

Last update: @1/7/2023
혼자 공부하는 컴퓨터구조 + 운영체제

운영체제

09 운영체제 시작하기

10 프로세스와 스레드

11 CPU 스케줄링

12 프로세스 동기화

13 교착 상태

14 가상 메모리

15 파일 시스템

프로세스(process) : 메모리에 적재되어 실행 중인 프로그램
프로세스 생성 : 보조기억장치에 있던 프로그램 코드가 메모리에 적재되는 것
종류
포어그라운드 프로세스(foreground process) : 사용자가 볼 수 있는 공간에서 실행되는 프로세스
백그라운드 프로세스(background process) : 사용자가 보지 못하는 뒤편에서 실행되는 프로세스
데몬(daemon) : 유닉스 운영체제에서 백그라운드 프로세스를 부르는 이름
서비스(service) : 윈도우 운영체제에서 백그라운드 프로세스를 부르는 이름
프로세스 제어 블록(PCB; Process Control Block) : 프로세스와 관련된 정보를 저장하는 자료구조로, 프로세스를 식별하기 위한 정보들이 저장되어 있음
PCB는 커널 영역에 생성됨
PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기됨
담기는 정보
프로세스 ID(PID; Process ID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호. 같은 일을 수행하는 프로그램이라 할지라도 두 번 실행하면 PID가 다른 두 개의 프로세스가 생성됨
레지스터 값 : 해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값. 프로세스가 자신의 실행 차례가 돌아오면 이 값을 이용해 이전까지 사용했던 레지스터의 중간값들을 모두 복원함
프로세스 상태 : 현재 프로세스가 입출력장치를 사용하기 위해 기다리고 있는 상태인지, CPU를 사용하기 위해 기다리고 있는 상태인지, 아니면 CPU를 이용하고 있는 상태인지 등의 상태
CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
메모리 관리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보. 베이스 레지스터 값, 한계 레지스터 값, 페이지 테이블 정보(14장 참고) 등
사용한 파일과 입출력장치 목록 : 프로세스가 실행 과정에서 사용한 특정 입출력장치나 파일의 목록
문맥 교환 : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
문맥(context) : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 중간 정보. 즉, PCB에 기록되는 정보
문맥을 자주 교환할수록 프로세스들이 동시에 실행되는 것처럼 보이지만, 또 너무 잦으면 오버헤드가 발생할 수 있음
 메모리 내 영역의 구분
정적 할당 영역(정적 메모리 할당, Static Memory Allocation) : 프로세스 실행 과정에서 크기가 변하지 않는 영역
코드 영역(code segment = text segment) : 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장됨.
데이터가 아닌 CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지되어 있음(read-only)
프로세스 실행 중 명령어가 바뀔 일이 없으니 크기가 변하지 않음
데이터 영역(data segment) : 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
전역 변수(global variable)가 대표적
프로그램이 실행될 때 크기가 할당되기 때문에 크기가 변하지 않음
동적 할당 영역(동적 메모리 할당, Dynamic Memory Allocation)
힙 영역(heap segment)(heap: 쌓다, 수북히 담다, 더미, 무더기) : 프로그래머가 직접 할당할 수 있는 저장 공간
프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 함
메모리 공간을 반환한다는 의미는 더 이상 해당 메모리 공간을 사용하지 않겠다고 운영체제에 말해주는 것
메모리 누수(memory leak) : 사용하지 않는 메모리 공간을 반환하지 않아 메모리 공간이 낭비되는 것
스택 영역(stack segment) : 데이터를 일시적으로 저장하는 공간. 잠깐 쓰다가 말 값들이 저장됨
매개변수, 지역 변수가 대표적
힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에 동적 할당 영역이라고 부름
따라서 일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당됨. 그래야 두 영역에 데이터가 쌓여도 주소가 겹칠 일이 없기 때문