[Operating System] 커널 구조와 프로세스
운영체제의 코어 기능을 모아둔 커널을 구현할 때, 구현하는 방식에 따라 Monolithic Kernel과 Micro Kernel로 구분된다.

사용자 공간 - 응용 프로그램에서 실행되는 영역
커널 공간 - 운영체제의 핵심 기능이 실행되는 영역
MonolithicKernel
운영체제의 모든 핵심 기능이 하나의 커널 공간에서 실행되는 방식으로, Unix와 Linux는 Monolithic Kernel로 구성되어있다.
마이크로 커널보다 실행 속도가 빠르지만 작은 에러가 전체 시스템에 전파될 수 있고 커널의 크기가 크다.
MicroKernel
운영체제의 핵심 기능을 최소화하고 나머지 기능을 사용자 공간에서 가져오는 커널 구조로, IoT 장치 등 작은 운영체제가 필요한 기기에서 사용된다.
개발할 때 전체 커널을 다시 컴파일하지 않아도 돼 편리하지만 IPC를 사용해서 외부 공간과 소통해야 해서 성능이 낮아질 수 있다.
애플리케이션에 운영체제의 기능을 따로 빼 두지만, 이 기능들이 항상 메모리에 올라와 있지는 않는다.
사실 프로그램 형태로 운영체제의 기능을 사용하는 경우 MonolithicKernel을 사용할 때 보다 메모리를 더 많이 사용하지만, 필요한 기능만 선택해서 메모리에 로드할 수 있어 메모리를 좀 더 가볍게 유지할 수 있다.

우측은 Unix의 내부 구조로 MonolithicKernel 구조로 이루어져 있고, Kernel은 System Call Interface에 감싸져 있어 응용 프로그램은 System Call을 통해 커널에 접근할 수 있다.
대형 컴퓨터를 위한 운영체제인 Unix를 개인용 컴퓨터에서도 활용하기 위해 Linux 운영체제가 오픈소스로 도입됐다.

Linux의 내부 구조로, 빠른 실행 속도를 위해 MonolithicKernel 구조로 설계됐다.

반면 윈도우는 MicroKernel 구조로 설계되었다.
원래는 운영체제가 수행하는 기능을 커널 바깥으로 빼 독립적인 프로그램으로 만들어지고 실행된다.
프로그램이 실행 상태에 있는 경우 프로세스라고 부른다.
exe 파일 자체는 프로그램이고, exe 파일을 통해 실행되는 리소스는 프로세스라고 할 수 있다.


프로세스는 아래 세 개의 부분으로 구분된다.
실행할 명령어가 모인 code 부분 / 명령의 실행 대상이 되는 데이터 / 실행에 필요한 운영체제 리소스의 집합
0번지부터 5000번지까지는 운영체제가 들어있다.
(Dispatcher는 커널 함수로 실행될 프로세스에 CPU를 배정.. 스프링의 디스패처 서블릿과 비슷한 역할을 수행한다)
Program Counter에는 다음 실행할 프로세스의 주소를 저장하고 있고, CPU는 현재 B를 실행하고 있다.

프로세스가 실행 중, 대기 두 가지 상태만 가진다고 가정하자.
해당 프로세스에 할당된 시간이 끝나거나 프로세스가 I/O 작업에 들어간 경우 현재 작업 중인 프로세스를 대기 상태로 놓고 다른 프로세스를 이어서 작업한다.
사용자가 명령을 통해 프로세스를 만들든, 부팅 시 프로세스를 만들든, 이미 실행 중인 프로세스가 자식 프로세스를 만들든 모든 프로세스 생성 관련 처리는 운영체제가 수행하게 된다.
프로세스가 모든 일을 끝마쳤거나 부모 프로세스가 자식 프로세스를 없애거나 프로세스 실행 중 비정상적인 오류가 감지된 경우 프로세스를 종료시킨다.

이번에는 프로세스가 5개의 상태를 가진다고 가정하자.
프로세스가 처음 생성된 경우 New 상태로, 실행을 준비하기 위해 메모리에 적제되었지만 CPU에서 실행되지 않은 상태이다.
실행할 준비가 됐지만 CPU를 할당받지 못한 경우 Ready 상태이고, CPU가 할당되면 실행될 수 있다.
프로세스가 실행되다가 I/O 작업을 수행해야 하거나 리소스에 락이 걸린 경우 Blocked 상태가 된다.
프로세스가 종료된 경우 Terminated 상태가 돼 CPU 및 리소스를 커널에게 반납하고 자원 소모 통계 정보만 가지고 있게 되는데, wait 시스템 콜이 호출된 후 시스템에서 사라진다.

프로세스가 Blocked 상태가 되는 요인에는 여러 가지가 있는데, 원인별로 따로 큐를 만들어 관리해 운영체제의 실행 성능을 최적화한다.
메모리에 세 가지 프로세스를 올려놓고 작업하다가, 세 프로세스 모두 Blocked 상태가 되거나 해당 프로세스가 특정 시간 마다 수행되는 작업인 경우 운영체제는 CPU 효율을 높이기 위해 Blocked 상태가 된 프로세스들의 상태를 보조 기억 장치에 옮기고 메모리에 새로운 프로세스를 가져온다.
메모리에서 보조 기억 장치로 옮기는 작업을 swap out 이라고 부르고, 보조 기억 장치로 옮겨진 프로세스는 suspended 상태가 된다.
모든 작업은 메인 메모리를 효과적으로 사용하기 위해서...


운영체제는 현재 어떤 장치가 사용되고 있고, 어떤 파일이 사용되고 있으며, 메모리의 어떤 부분이 사용되고 있는지 파악할 때 사용된다.
Process Control Block은 운영체제에서 프로세스를 관리하는 핵심 자료구조로, 각 프로세스의 상태 및 정보를 저장한다.
Identifier
프로세스의 식별자 역할을 수행하고, 정수 값으로 할당되며 운영체제는 auto increment 전략을 사용한다.
프로세스 자신의 식별자와 부모 프로세스의 식별자, 현재 프로세스를 실행시키는 사용자 프로세스의 식별자도 함께 저장한다.
State, Priority, Program Counter
State는 각 프로세스의 상태를 저장하고, Priority는 프로세스의 우선순위를 저장한다.
Ready, Run 등의 상태값 외에도 프로세스가 중단된 경우 프로세스의 진행 상황을 CPU Register에 저장한다.

CPU는 정보의 입출력 부분(IN, OUT), 명령을 실행하는 부분(ALU), 명령을 실행하는 정보가 저장되는 부분(Register)으로 구성된다.
eax, ebx, ecx 레지스터는 연산에 필요한 값을 임시로 저장할 때 사용된다.
eip는 Program Counter로 명령을 가리키고 eflags는 프로세스의 상태를 저장할 때 사용된다.
cs, ds, ss 는 Segment Selector로 불리는 레지스터이고, TSS 영역에는 Context Switch가 발생할 때 사용된다.
Scheduling and State Information
Process Scheduling, Job Scheduling, Job Scheduling 모두 같은 용어로 사용된다.
CPU는 각 프로세스의 상태, 우선순위, 사용량을 바탕으로 프로세스의 실행을 관리한다.
Accounting Information
해당 프로세스가 사용한 CPU 및 메모리 사용량을 저장한다.
Data Structing
프로세스는 부모 프로세스로부터 생성되고, 자식 프로세스는 형제 관계를 가질 수 있다.

o - older / y - younger 로 생각하자.
이 외에도 프로세스간 통신 관련 정보, 권한, 메모리를 차지하고 있는 주소 등을 함께 저장한다.

실제 PCB가 어떻게 구현되는지는 운영체제마다 다르다.
위 그림은 리눅스 운영체제에서 구현된 PCB로, Process Descriptor라는 이름을 사용한다.
리눅스는 PCB를 여러 sub 자료구조로 분리된 형태로 설계했는데, 이런 설계 덕분에 다른 PCB의 task_struct와 sub 자료구조를 쉽게 공유할 수 있다.

운영체제는 운영체제 내 존재하는 모든 프로세스를 Double Linked List로 연결해서 관리한다.
여기서 run_queue는 실행 가능한 상태인 프로세스의 집합으로 Ready Queue와 같은 의미로 사용된다.
'Computer Science > Operating System' 카테고리의 다른 글
[Operating System] 프로세스와 동시성 제어 (0) | 2025.03.28 |
---|---|
[Operating System] Process Termination / Thread (0) | 2025.03.19 |
[Operating System] Process (Context, Creation, Switch) (0) | 2025.03.17 |
[Operating System] 운영체제 개요 (0) | 2025.03.10 |
[Ubuntu] 셸 스크립트 프로그래밍 (0) | 2023.09.11 |
댓글
이 글 공유하기
다른 글
-
[Operating System] Process Termination / Thread
[Operating System] Process Termination / Thread
2025.03.19 -
[Operating System] Process (Context, Creation, Switch)
[Operating System] Process (Context, Creation, Switch)
2025.03.17 -
[Operating System] 운영체제 개요
[Operating System] 운영체제 개요
2025.03.10 -
[Ubuntu] 셸 스크립트 프로그래밍
[Ubuntu] 셸 스크립트 프로그래밍
2023.09.11
댓글을 사용할 수 없습니다.