01. 프로세스
프로그램은 실행되기전까지는 보조기억장치에 있는 데이터 덩어리일 뿐이지만 메모리에 적재하고 실행하는 순간에 프로세스가 됩니다. 프로세스는 크게 사용자가 볼 수 있는 공간에서 실행되는 프로세스인 포그라운드 프로세스와 사용자가 볼 수 없는 공간에서 실행되는 프로세스인 백그라운드 프로세스가 있습니다.
- 포그라운드 프로세스
-사용자가 볼 수 있는 공간에서 실행되는 프로세스 (웹브라우저, 메모장, 게임, 워드프로세서)
-백그라운드 프로세스
-사용자가 볼 수 없는 공간에서 실행되는 프로세스
-사용자와 직접 상호작용이 가능한 백그라운드 프로세스
-사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스가 있음 (데몬(daemon) || 서비스라고 부름)
운영체제는 어떤 방식으로 프로세스를 관리할까요? 모든 프로세스는 실행을 위한 CPU가 필요하지만 CPU의 자원은 한정되어있습니다. 프로세스들은 돌아가며 한정된 시간 만큼만 CPU를 이용합니다. 자신의 차례에 정해진 시간만큼 CPU를 이용하고 타이머 인터럽트가 발생하면 차례 양보하는 방식으로 CPU를 이용하게 됩니다. 빠르게 번갈아 수행되는 프로세스들을 운영체제는 관리해야합니다. 이를 위해 사용하는 자료구조가 프로세스 제어 블록 (PCB)입니다.
02. PCB 란?
PCB란, 프로세스 관련 정보를 저장하는 자료구조입니다. PCB에는 프로세스를 식별하기 위해 필요한 정보들이 저장됩니다. 마치 상품에 달린 태그와 같은 정보로 프로세스 생성 시 커널 영역에 생성, 종료시 폐기됩니다.
PCB에 담기는 대표적 정보로는 PID// 레지스터 값 // 프로세스 상태 // CPU 스케줄링 정보 // 메모리 정보 // 사용한 파일과 입출력장치 정보 등이 담깁니다ㅏ.
1. 프로세스 ID(PID)
-> 특정 프로세스를 식별하기 위해 부여하는 고유한 번호(학교의 학번, 회사의 사번)
2. 레지스터 값
-> CPU는 자원이 한정적, 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원 -> 실행 제개
프로그램 카운터, 스택포인터...등등을 이용하면서 프로세스는 실행이 됨
3. 프로세스 상태
-> 다음 강의에서 다룰 예정 // 입출력장치를 사용하기 위해 기다리는 상태 || CPU를 사용하기 위해 기다리는 상태 || CPU이용중인 상태
4. CPU 스케줄링 정보
-> 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
5. 메모리 정보
-> 프로세스가 어느 주소에 저장되어 있는지에 대한 정보// 페이지 테이블 정보(지금으로서는 '메모리 주소를 알 수 있는 정보가 담기는구나 ' 정도로
6. 사용한 파일과 입출력장치 정보
->할당된 입출력 장치 , 사용중인(열린)파일 정보
운영체제는 PCB를보고 프로세스를 관리하게 됩니다.
03. 문맥교환이란? (context switch)
하나의 프로세스가 수행을 재개하기 위해 기억해야 할 정보를 문맥(context)라고 합니다. 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있습니다. PCB에 기록되는 정보들을 문맥이라고 봐도 무방합니다. 문맥교환이란 기존의 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정을 문맥 교환이라 합니다.
실행 문맥을 기억해두면 언제든 해당 프로세스의 실행을 재개할 수 있기 때문에 프로세스가 CPU를 사용할 수 있는 시간이 다 되거나 예기치 못한 상황이 발생하여 인터럽트가 발생하면 운영체제는 해당 프로세스의 PCB에 문맥을 백업합니다.
한 프로세스에서 다른 프로세스로 실행 순서가 넘어가면? 어떤 작업을 거쳐야할까요?
먼저 CPU의 자원을 받아 프로세스실행중 타이머인터럽트 발생 -> 기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업 -> 뒤이어 실행할 프로세스 B의 문맥을 복구 -> 자연스럽게 실행 중인 프로세스가 바뀜
-프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치등 -> 이러한 중간정보를 문맥(context)라고 합니다.
이러한 과정을 문맥교환이라 합니다. 즉, 문맥교환은 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리입니다.
04. 쓰레드
쓰레드는 한 프로세스를 구성하는 실행 흐름 단위입니다. 그리고 한 개의 프로세스는 여러 개의 쓰레드를 가질 수 있습니다. 쓰레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있습니다.
04-1. 프로세스와 쓰레드
원래 하나의 프로세스는 한 번에 하나의 일만을 처리했습니다. '실행의 흐름 단위가 하나'라는 점에서 이렇게 실행되는 프로세스들은 단일 쓰레드 프로세스라고 볼 수 있습니다.
그러나, 쓰레드라는 개념이 도입되면서 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있게 되었습니다. 즉, 프로세스를 구성하는 여러 명령어를 동시에 실행할 수 있게 되었습니다.
쓰레드는 프로세스 내에 각기 다른 쓰레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성됩니다. 각자 프로그램 카운터 값을 비롯한 레지스터 값, 스택을 가지고 있기 때문에 각기 다른 코드를 실행할 수 있습니다.
여기서 가장 중요한 점은 쓰레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 '공유' 하며 실행합니다.
04-2. 멀티 프로세스와 멀티 쓰레드
컴퓨터는 실행 과정에서 여러 프로세스가 동시에 실행도딜 수 있고, 그 프로세스를 이루는 쓰레드는 여러 개 있을 수 있습니다. 이때 프로세스를 동시에 실행하는 것을 멀티 프로세스, 그리고 쓰레드를 동시에 실행하는 것을 멀티
본 글은 인프런의 [혼자공부하는 컴퓨터 구조 + 운영체제 ] 인강을 참고하였습니다.
https://inf.run/W32w
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 교착상태 (Deadlock) (0) | 2023.08.25 |
---|---|
[운영체제]CPU 스케줄링 (0) | 2023.08.21 |
[운영체제] 운영체제 기초 (0) | 2023.08.19 |
[컴퓨터구조]입출력장치 [I/O device] (0) | 2023.08.18 |
[컴퓨터구조]CPU의 성능향상기법 (0) | 2023.08.14 |