이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Operating System] 커널 구조와 프로세스

  • 2025.03.12 00:03
  • Computer Science/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 상태로, PCB는 생성됐지만 실행 코드나 데이터는 메모리에 올라가지 않은 상태이다.

실행할 준비가 됐지만 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와 같은 의미로 사용된다.

 

RAM에 올라간 프로세스를 관리할 때는 PCB를 사용한다.

PCB는 swap out으로 프로세스가 보조 기억 장치로 이동하더라도 RAM에서 제거되지 않고, 프로세스당 하나씩 매핑된다.

 

즉.. new 상태가 될 때 생성된 프로세스의 PCB는 해당 프로세스가 Terminated 되고 wait 시스템 콜으로 정리되기 전까지 존재한다.

 

반응형
저작자표시 (새창열림)

'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] Outline  (0) 2025.03.10
[Ubuntu] 셸 스크립트 프로그래밍  (0) 2023.09.11

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [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] Outline

    [Operating System] Outline

    2025.03.10
  • [Ubuntu] 셸 스크립트 프로그래밍

    [Ubuntu] 셸 스크립트 프로그래밍

    2023.09.11
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8) N
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바