Skip to content

학습 기록 | w5 지현

Jihyun Lim edited this page Mar 5, 2025 · 1 revision

9. 운영체제 시작하기

09-1. 운영체제를 알아야 하는 이유

#운영체제 #문제 해결

자원 / 시스템 자원

  • 프로그램 실행에 필요한 요소
  • 컴퓨터의 네가지 핵심 부품 포함
  • 모든 프로그램은 실행을 위해 자원을 필요로 한다

운영체제

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

  • 메모리에 적재되어 실행 → 커널 영역
  • 메모리, CPU, 입출력장치 관리

커널 영역 kenel space

  • 운영체제

사용자 영역 user space

  • 사용자가 이용하는 응용 프로그램
  • 운영체제가 관리

💡 운영체제는 사용자를 위한 프로그램이 아니다! 프로그램을 위한 프로그램이다.

09-2. 운영체제의 큰 그림

#커널 #이중 모드 #시스템 호출 #운영체제 서비스

커널 kernel

  • 운영체제의 핵심 기능 담당

사용자 인터페이스 UI; User Interface

  • 운영체제 속하지만 커널에 속하지 않는 기능
  • 사용자와 컴퓨터간의 통로, 운영체제의 핵심 기능은 아님

ex ) 그래픽 유저 인터페이스 GUI; Graphical User Interface 커맨드 라인 인터페이스 CLI; Command Line Interface

💡 운영체제는 응용프로그램 대신 자원에 접근 → 이중모드로서 구현

이중 모드

dual mode

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

사용자 모드 user mode

  • 운영체제 서비스를 제공받을 수 없는 실행 모드
  • 커널 영역의 코드를 실행할 수 없는 실행 모드
  • 자원 접근 불가

커널 모드 kernel mode

  • 운영체제의 서비스를 제공받을 수 있는 실행 모드
  • 자원 접근을 비롯한 모든 명령어 실행 가능

시스템 호출(시스템 콜, system call)

  • 커널 모드로 변환하여 실행하기 위해 호출
  • 소프트웨어 인터럽트

ex) fork(), execve(), exit(), waitpid(), open(), close(), read(), write(), stat() …

운영체제의 핵심 서비스

  1. 프로세스 관리

    프로세스 == 실행 중인 프로그램

    • 동시다발적으로 생성/실행/삭제 되는 다양한 프로세스를 관리

    💡 더 알아보기 : 프로세스와 스레드, 프로세스 동기화, 교착상태 해결

  2. 자원 접근 및 할당

    CPU

    • CPU 스케줄링 : 어떤 프로세스를 먼저, 얼마나 오래 실행할까?

    메모리

    • 프로세스의 적재 위치 결정
    • 페이징, 스와핑

    입출력장치

    • 인터럽트 서비스 루틴(커널 영역)
  3. 파일 시스템 관리

    • 관련된 정보를 파일이라는 단위로 저장 장치에 보관
    • 파일들을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관

💡 시스템 콜 자세히보기 tool

리눅스 - strace ./a.out

맥OS - sudo dtruss ./a.out


10. 프로세스와 스레드

10-1. 프로세스 개요

#프로세스 #프로세스 제어 블록 #문맥 교환 #프로세스 사용자 영역

프로세스

  • 실행중인 프로그램
  1. 포그라운드 프로세스 (foreground process)
    • 사용자가 볼 수 있는 공간에서 실행되는 프로세스
  2. 백그라운드 프로세스 (background process)
    • 사용자가 볼 수 없는 공간에서 실행되는 프로세스

    • 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스

      ex) 데몬 (demon), 서비스 (service)

프로세스 제어 블록

  • 프로세스들은 돌아가며 한정된 시간 만큼만 CPU 이용

    • 자신의 차례에 정해진 시간만큼 CPU 이용
    • 타이머 인터럽트가 발생하면 차례 양보
  • 빠르게 번갈아 수행되는 프로세스들을 관리하는 자료구조를 프로세스 제어 블록(PCB; Process Control Block)

    • 프로세스 관련 정보를 저장하는 자료구조, 프로세스 식별
    • 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기

    새로운 프로세스 생성 == 운영체제가 PCB를 생성

    프로세스 종료 == 운영체제가 해당 PCB를 폐기

PCB에 담기는 대표적인 정보

  • 프로세스 ID (PID; Process ID)
    • 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
  • 레지스터 값
    • 프로세스는 실행 차례가 오면 사용중인 레지스터들의 중간값들을 모두 복원 → 실행 재개
    • PCB안에는 해당 프로세스가 실행하며 사용했던 레지스터 값을 담음
      • 프로그램 카운터, 스택 포인터 ..
  • 프로세스 상태
    • 입출력 장치 사용을 위해 기다리는 상태, CPU 사용을 기다리는 상태, …
  • CPU 스케줄링 정보
    • 프로세스가 언제, 어떤 순서로 CPU를 할당받을 지
  • 메모리 관리 정보
    • 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
    • 페이지 테이블 정보
  • 사용한 파일과 입출력장치 목록
    • 할당된 입출력장치, 사용 중인(열린) 파일 정보

문맥교환 context switch

기존의 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정

  1. 한 프로세스(A)에서 다른 프로세스(B)로 실행 순서가 넘어간다.
  2. 기존에 실행중인 프로세스 A는 지금까지의 중간 정보를 백업
    • 문맥 (context) == 중간 정보
    • 다음 차례에 실행 재개를 위한 정보
    • 프로그램 카운터 등 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력 장치 등
  3. 뒤이어 실행할 프로세스 B의 문맥을 복구

프로세스의 메모리 영역

정적 할당 영역

  • 코드 영역, 데이터 영역

동적 할당 영역

  • 힙 영역(낮은 주소 → 높은 주소 할당)
  • 스택 영역(높은 주소 → 낮은 주소 할당)
  1. 코드 영역 (=텍스트 영역)

    code segment

    • 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장 (데이터 X)
    • 쓰기 금지 (read-only)
  2. 데이터 영역

    text segment

    • 프로그램이 실행되는 동안 유지할 데이터

    ex) 전역 변수

  3. 힙 영역

    heap segment

    • 프로그램을 만드는 사용자가 직접 할당할 수 있는 저장공간
    • 해당 공간을 반환해야 함 → 메모리 누수 (memory leak) 방지
  4. 스택 영역

    • 데이터가 일시적으로 저장되는 공간

    ex) 매개 변수, 지역 변수

10-2. 프로세스 상태와 계층 구조

#프로세스 상태 #부모 프로세스 #자식 프로세스 #프로세스 계층 구조

프로세스 상태

  1. 생성 상태 (new)
    • 메모리에 막 적재되어 PCB를 할당 받은 상태
    • 준비가 완료되었다면 준비 상태로 CPU 할당 기다림
  2. 준비 상태 (ready)
    • 당장 CPU를 할당 받아 실행할 수 있지만 차례를 기다리는 상태
    • 차례가 오면 실행 상태로 (=디스패치;dispatch)
  3. 실행 상태 (running)
    • CPU를 할당 받아 실행 중인 상태
    • 할당된 시간 모두 사용 시(타이머 인터럽트 발생) 준비 상태로
    • 실행 도중 입출력장치를 사용하면 끝날 때까지 대기 상태로(입출력 인터럽트를 받을때까지)
  4. 대기 상태 (blocked)
    • 프로세스가 실행 도중 입출력장치를 사용하는 경우
    • 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태로
    • 입출력 작업이 끝나면 (입출력 완료 인터럽트를 받으면) 준비 상태로
  5. 종료 상태 (terminated)
    • 프로세스가 종료된 상태
    • PCB, 프로세스의 메모리 영역 정리

프로세스 계층 구조

프로세스 실행 도중 (시스템 호출을 통해) 다른 프로세스를 생성 → 도표로 그리면 트리 구조

  • 부모 프로세스 (parent process)
  • 자식 프로세스 (child process)
    • 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 함

부모/자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐

프로세스 생성 기법

fork

  • 부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성
  • 부모 프로세스의 자원 상속(PID와 저장된 메모리 위치는 다름)

exec

  • 자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체

10-3. 스레드

#스레드 #멀티프로세스 #멀티스레드

스레드

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

하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.

단일 스레드 프로세스

  • 실행 흐름이 하나인 프로세스

멀티 스레드 프로세스

  • 프로세스를 이루는 여러 명령어 동시 실행 가능

스레드의 구성 요소

  • 스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등
  • 실행에 필요한 최소한의 정보

💡 프로세스를 이루는 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행됨

멀티 프로세스와 멀티 스레드

동일한 작업을 수행하는 단일 스레드 프로세스 여러 개 실행

vs

하나의 프로세스를 여러 스레드로 실행

멀티 프로세스 멀티 스레드
동일한 자원 여러개 하나의 자원 공유
메모리에 동일한 내용 중복 → 낭비 효율적인 메모리 사용
독립적으로 실행 협력과 통신에 유리
다른 프로세스에 문제가 생겨도 지장이 없음 다른 스레드에 문제가 생기면 전체에 지장

프로세스 간 통신

IPC; Inter-Process Communication

  • 파일을 통한 프로세스간 통신
  • 공유 메모리(shared memory)

5주차 퀴즈

  1. 옳지 않은 것을 고르시오

    1. GUI와 CLI는 사용자를 위한 필수 서비스로 커널에 포함되어 있다.
    2. 시스템 호출을 통해 사용자 모드를 커널 모드로 변경할 수 있다.
    3. 백그라운드 프로세스는 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스로 데몬 (demon), 서비스 (service)을 포함한다.
    4. 프로세스들은 문맥 교환을 통해 번갈아 가며 수행된다.
  2. 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 빈칸에 올바른 단어를 적으시오. (한글, 영어 모두 가능)

    image

  3. 멀티 프로세스를 실행하는 것과 멀티 스레드로 실행하는 것의 장점과 단점에 대해 설명하시오.

정답

1. 1) UI(GUI, CLI) 는 커널에 포함되지 않는다.
2. 왼 : ready(준비)
  오 : running(실행)
3. 멀티 프로세스 : 메모리에 동일한 내용이 중복되어 낭비가 될 수 있지만 독립적으로 실행되어 다른 프로세스에 문제가 생겨도 영향이 없다.
   
   멀티 스레드 : 하나의 자원을 공유하여 효율적인 메모리 사용과 통신에 유리하지만 다른 스레드에 문제가 생기면 전체에 영향이 간다.

Clone this wiki locally