본문 바로가기
CS/운영체제

운영체제 | 운영체제, 프로세스와 스레드

by 개발송이 2025. 9. 3.

1. 운영체제

 

운영체제

- 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

- 컴퓨터가 부팅될 때 메모리 내 커널 영역에 따로 적재되어 실행

 

메모리는 커널 영역사용자 영역으로 나눠짐

 

커널

- 운영체제의 핵심 기능을 담당

- 운영체제가 설치된 모든 기기에는 커널이 있음

- 어떤 커널을 사용하는지에 따라 하드웨어를 이용하는 양상이 달라지고 컴퓨터 전체 성능도 달라질 수 있음

 

사용자 인터페이스

- 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스

- 그래픽 유저 인터페이스(GUI) : 윈도우 바탕화면이나 스마트폰의 화면처럼 그래픽 기반으로 컴퓨터와 상호작용하는 인터페이스

- 커맨드 라인 인터페이스(CLI) : 명령어를 기반으로 상호작용하는 인터페이스

 

이중모드

- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식

1) 사용자 모드

- 운영체제 서비스를 제공받을 수 없는 실행 모드. 즉 커널 영역의 코드를 실행할 수 없는 모드

- 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행

2) 커널 모드

- 운영체제 서비스를 제공받을 수 있는 실행 모드

 

 

시스템 호출

- 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법

 

운영체제의 핵심 서비스

- 프로세스 관리

- 자원 접근 및 할당

- 파일 시스템 관리

 


2. 프로세스와 스레드

 

2.1 프로세스 개요

 

프로세스

: 실행중이 프로그램

 

포그라운드 프로세스

- 사용자가 보는 앞에서 실행되는 프로세스

백그라운드 프로세스

- 사용자가 보지 못하는 뒤에서 실행되는 프로세스

- 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스를 유닉스 체제에서는 데몬, 윈도우 체제에서는 서비스라고 함

 

프로세스 제어 블록(PCB)

- 프로세스와 관련된 정보를 저장하는 자료 구조

- 커널 영역에 생성

- 프로세스 생성 시 만들어지고 실행이 끝나면 폐기

 

PCB에 담기는 정보

- 프로세스ID (PID) : 특정 프로세스를 식별하기 위해 부여하는 고유번호

- 레지스터 값 : 프로세스는 자신의 차례가 돌아오면 이전까지 진행했던 작업들을 그대로 이어 실행하기 위해, 이전까지 사용했던 레지스터의 중간값들을 모두 복원함

- 프로세스 상태 : CPU 사용중인지, 기다리는 중인지, 입출력장치 사용 상태 등

- CPU 스케줄링 정보 : 언제 어떤 순서로 CPU를 할당받을지

- 메모리 관리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보, 레지스터 값, 페이지 테이블 정보

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

 

 

문맥

- 중간 정보, 즉 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보

- 해당 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있음

 

문맥 교환

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

 

 

프로세스의 메모리 영역

프로세스가 생성되면 커널 영역에 PCB가 생성됨

사용자 영역에는 코드 영역/ 데이터 영역/ 힙 영역/ 스택 영역 으로 나뉘어 저장 됨

- 코드, 데이터 영역 > 정적 할당 영역

- 힙, 스택 영역 > 동적 할당 영역

 

                          <메모리>

커널 영역
스택 영역
힙 영역
데이터 영역
코드 영역
...

 

 

1) 코드 영역

- 텍스트 영역이라고도 함

- 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장

- 데이터가 아닌 명령어가 담겨있기 때문에 쓰기 금지, 읽기 전용 공간(Read-Only)

 

2) 데이터 영역

- 실행되는 동안 유지할 데이터가 저장되는 공간 > 전역 변수

 

3) 힙 영역

- 프로그래머가 직접 할당할 수 있는 저장 공간

- 힙 영역 메모리 공간 할당한 경우 언젠가는 해당 공간 반환해야하며 반환하지 않으면 메모리 누수 발생 할 수 있음

 

4) 스택 영역

- 데이터를 일시적으로 저장하는 공간 > 매개 변수, 지역 변수

 

 

2.2 프로세스 상태와 계층 구조

 

프로세스 상태

1) 생성 상태

- 프로세스를 생성중인 상태

- 이제 막 메모리에 적재되어 PCB 할당 받은 상태

 

2) 준비 상태

- 당장 CPU를 할당받아 실행할 수 있지만, 자신의 차례가 아니기에 기다리고 있는 상태

- 준비 상태 프로세스는 차례가 되면 CPU를 할당받아 실행 상태가 됨

- 디스패치 : 준비 상태인 프로세스가 실행 상태로 전환되는 것

 

3) 실행 상태

- CPU를 할당받아 실행 중인 상태

- 프로세스가 할당된 시간을 모두 사용하면(타이머 인터럽트가 발생하면) 다시 준비 상태가 됨

 

4) 대기 상태

- 입출력장치의 작업을 기다리는 상태

 

5) 종료 상태

- 프로세스가 종료된 상태

- 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리함

 

 

프로세스 계층 구조

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있음

- 부모 프로세스 : 새 프로세스를 생성한 프로세스

- 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스

 

- 부모, 자식 프로세스는 다른 프로세스이기에 다른 PID를 가짐

- 일부 운영체제에서는 자식프로세스의 PCB에 부무PID인 PPID가 기록되기도 함

- 데몬, 서비스 또한 최초 프로세스의 자식 프로세스임

 

최초 프로세스

- 유닉스 - init, 리눅스 - systemd, macOS - launched

- PID는 항상 1이며 모든 프로세스의 최상단에 있는 부모 프로세스

 

프로세스 생성 기법

- fork : 자기 자신 프로세스의 복사본을 자식 프로세스로 생성하는 시스템 호출

- exec : 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출

 

 

2.3 스레드

 

스레드

- 프로세스를 구성하는 실행의 흐름 단위

- 하나의 프로세스는 여러 개의 스레드를 가짐 -> 하나의 프로세스에서 여러 부분 동시에 실행 가능

 

단일 스레드 프로세스

- 모든 프로세스가 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행되는 프로세스

 

* 리눅스 운영체제에서는 프로세스와 스레드를 구분 짓지 않고 모두 실행의 문맥이라는 점에서 동일하다고 보고

'테스크'라는 이름으로 명명함

 

멀티프로세스

- 여러 프로세스를 동시에 실행하는 것

 

멀티스레드

- 여러 스레드로 프로세스를 동시에 실행하는 것

 

프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 프로세스 내 자원을 공유함

* 프로레스 간 통신 (IPC) : 프로세스 간 자원을 공유하고 데이터를 주고 받는 것