컴퓨터구조+운영체제

프로세스

chojdsj 2023. 12. 21. 19:50
728x90

 

 

 

프로세스

 

 

- 프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리일 뿐이지만, 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다. 이 과정을 프로세스를 생성한다라고 표현한다.

 

 

- 컴퓨터가 부팅되는 순간부터 수많은 프로세스들이 실행되는데 윈도우에서는 작업관리자의 프로세스 탭에서 확인할 수 있고, 유닉스 체계의 운영체제에서는 PS 명령어로 확인할 수 있다.

 

- 사용자가 보는 앞에서 실행되는 프로세스는 포그라운드 프로세스라고 부르고, 사용자가 보지 못하는 뒤편에서 실행되는 프로세스는 백그라운드 프로세스라고 부른다.

 

- 이러한 백그라운드 프로세스를 유닉스에서는 데몬이라고 부르고, 윈도우에서는 서비스라고 부른다.

 

 

 

* 프로세스 제어 블록(Process Control Block)

 

- 프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료구조.

 

- 프로세스 제어 블록에는 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장된다.

 

 

 

 

- PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기된다.

 

 

 

 

* PCB에 담기는 정보

 

- 프로세스 ID(Process ID) 

 

프로세스 ID는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호이다. 학교의 학번과 같은 존재. 같은 일을 수행하는 프로그램이라 할지라도 두 번 실행하면 PID가 다른 두개의 프로세스가 생성된다.

 

 

- 레지스터 값

 

프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간 값들을 모두 복원한다. 그래서 PCB안에는 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값들이 담긴다.

 

 

- 프로세스 상태

 

현재 프로세스가 어떤 상태인지 PCB에 기록되어야 한다. 현재 대기중인지, 실행중인지에 대해서 PCB에 저장된다.

 

 

- CPU 스케줄링 정보

 

프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보도 PCB에 기록된다.

 

 

- 메모리 관리 정보

 

프로세스마다 메모리에 저장된 위치가 다르기 때문에 PCB 안에는 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야 한다. PCB 안에는 베이스 레지스터, 한계 레지스터 값과 같은 정보들이 담기며, 페이지 테이블 정보도 저장된다.

 

 

- 사용한 파일과 입출력장치 목록

 

프로세스가 실행과정에서 특정 입출력장치나 파일을 사용하면 PCB에 해당 내용이 명시된다. 즉, 어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보들이 PCB에 기록된다.

 

 

 

 

 

* 문맥 교환

 

- 프로세스의 수행을 재개하기 위해 기억해야할 정보문맥이라고 한다. 하나의 프로세스 문맥은 해당 프로세스의 PCB에 저장되어 있다. PCB에 기록되는 정보들을 문맥이라고 봐도 무방하다.

 

- 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것을 문맥 교환이라고 한다. 

 

 

 

 

 

 

 

 

프로세스의 메모리 영역

 

 

- 프로세스가 생성되면 커널 영역에 PCB가 생성되어지고, 사용자 영역에는 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

 

 

 

 

- 코드 영역

 

코드 영역은 텍스트 영역이라고도 부른다. 이곳에는 말 그대로 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다. 코드 영역에는 CPU가 실행할 명령어가 담겨져 있기 때문에 쓰기가 금지되어 있고, 읽기 전용 공간입니다.

 

 

- 데이터 영역

 

데이터 영역은 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다. 이런 데이터로는 전역 변수가 대표적이다. 

* 전역 변수 : 프로그램이 실행되는 동안 유지되며, 프로그램 전체에서 접근할 수 있는 변수

 

 

코드 영역과 데이터 영역은 그 크기가 변하지 않는 정적 할당 영역이라고 부릅니다. 왜냐하면 프로그램을 구성하는 명령어들이 갑자기 바뀔 일이 없으니 코드 영역의 크기가 변할 리 없고, 데이터 영역에 저장될 내용은 프로그램이 실행되는 동안에만 유지되기 때문.

힙 영역과 스택 영역은 실행 과정에서 크기가 변할 수 있는 영역이므로 동적 할당 영역이라고 부른다.

 

 

- 힙 영역

 

 힙 영역은 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간이다. 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 한다. 그 의미는 더 이상 해당 메모리 공간을 사용하지 않겠다 라는 뜻이다. 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래하는데 이런 문제를 메모리 누수라고 한다.

 

 

- 스택 영역

 

스택 영역은 데이터를 일시적으로 저장하는 공간이다. 데이터 영역에 담기는 값과는 달리 잠깐 쓰다가 말 값들이 저장되는 공간. 대표적으로 함수의 실행이 끝나면 사라지는 매개변수, 지역변수가 있다.

 

 

 

 

 

프로세스 상태

 

 

 

- 위와 같은 도표를 프로세스 상태 다이어그램이라고 한다. 이처럼 컴퓨터 내의 여러 프로세스는 생성, 준비, 실행, 대기, 종료 상태를 거치며 실행된다. 

 

 

 

 

 

프로세스 계층 구조

 

 

- 프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다. 이때 새 프로세스를 생성한 프로세스를 부모 프로세스, 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스라고 한다.

 

 

 

- 컴퓨터가 부팅 될 때 실행되는 최초의 프로세스가 자식 프로세스들을 생성하고, 생성된 자식 프로세스들이 새로운 프로세스들을 낳은 형식으로 여러 프로세스가 동시에 실행된다.

 

 

 

 

 

프로세스 생성 기법

 

 

- 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성해 내고, 만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체합니다.

 

- fork를 통해 복사본이 만들어진 뒤에 자식 프로세스는 exec 시스템 호출을 통해 새로운 프로그램을 전환된다. exec자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출이다.

 

- exec를 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 혼자 공부하는 컴퓨터 구조 + 운영체제(강민철)

'컴퓨터구조+운영체제' 카테고리의 다른 글

운영체제  (1) 2023.12.07
RAID의 정의와 종류  (2) 2023.12.05
보조기억장치  (1) 2023.12.05
메모리의 주소, 캐시 메모리  (0) 2023.12.01
RAM의 특징과 종류  (1) 2023.12.01