[혼공컴운] 4주차_Ch9~11

김정민·2024년 7월 28일
0

혼공컴운

목록 보기
4/6
post-thumbnail

Ch09. 운영체제 시작하기

운영체제

시스템 자원: 프로그램 실행에 마땅히 필요한 CPU, 메모리, I/O 장치, 파일 시스템 등 다양한 요소들
운영체제 (OS; Operating System): 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고, 이들을 올바르게 실행되도록 관리함.
메모리는 커널 영역과 사용자 영역으로 나뉘며, OS는 컴퓨터 부팅 시 메모리 내 커널 영역에 적재되어 실행됨.
사용자 영역: 사용자가 이용하는 응용 프로그램이 적재되는 메모리 영역

커널

커널 (kernel): OS의 핵심 부분. 응용 프로그램과 HW 간의 인터페이스 제공
사용자 인터페이스 (UI): OS의 한 부분으로, 사용자가 컴퓨터와 상호작용할 수 있도록 함. 커널에 포함되지 않음.

  • 그래픽 유저 인터페이스 (GUI): 그래픽 기반 인터페이스
  • 커맨드 라인 인터페이스 (CLI): 명령어 기반 인터페이스

이중 모드 (dual mode): CPU가 명령어를 실행할 때 사용자/커널 모드 2가지 모드를 제공. 사용자 프로그램이 HW를 직접 제어하지 못하게 함.

  • 사용자 모드: 응용 프로그램이 동작하는 모드. 제한된 자원 접근
  • 커널 모드: OS가 동작하며 모든 자원에 접근 가능한 모드

시스템 호출 (system call): OS 서비스를 제공받기 위한 요청. 사용자 모드에서 커널 모드로 전환할 수 있음.
소프트웨어 인터럽트: 시스템 호출이나 예외 상황에서 발생하며, 현재 작업을 중단하고 커널 모드로 전환됨.

시스템 호출 처리 순서:
시스템 호출 -> 사용자 작업 상태 백업 -> 커널 모드 전환 -> 커널 코드 실행 -> 시스템 호출 복귀(사용자 모드로 복귀)

운영체제 핵심 서비스

프로세스 관리

프로세스: 실행 중인 프로그램
일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있으므로 여러 프로세스들을 조금씩 번갈아가면서 실행함.

자원 접근 및 할당

  • CPU: 프로세스 간 공정한 CPU 배분을 위해 CPU 스케줄링이 사용됨.
  • 메모리: 프로세스가 사용할 메모리 공간 관리, 메모리 할당 및 해제
  • I/O장치: I/O 작업 수행을 위해 인터럽트 서비스 루틴 제공. 효율적으로 장치 관리

파일 시스템 관리

파일 및 디렉토리 생성, 삭제, 읽기, 쓰기 등의 작업 관리


Ch10. 프로세스와 스레드

  • 포그라운드 프로세스: 사용자 인터페이스를 제공하는 프로세스
  • 백그라운드 프로세스: 사용자가 직접 실행하지 않지만 시스템에서 필요한 작업을 수행하는 프로세스. ex) 시스템 업데이트, 백업, 데몬(유닉스), 서비스(윈도우)

프로세스 제어 블록

타이머 인터럽트: 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 HW 인터럽트
프로세스 제어 블록 (PCB; Process Control Block): 프로세스와 관련된 정보를 저장하는 자료 구조. OS는 PCB를 통해 프로세스를 관리하고 문맥 교환을 실행함.

PCB 주요 정보:

  • 프로세스 ID (PID): 프로세스를 식별하기 위한 고유 번호
  • 레지스터 값: 프로세스가 사용 중인 CPU 레지스터의 값
  • 프로세스 상태: 프로세스가 현재 실행 중인지, 준비 상태인지, 대기 상태인지 등을 나타내는 정보
  • CPU 스케줄링 정보: 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지에 대한 정보
  • 메모리 관련 정보: 프로세스가 사용하는 메모리 영역에 대한 정보 (베이스 레지스터, 한계 레지스터 값 등)
  • 사용한 파일과 I/O 장치 목록: 프로세스가 사용 중인 파일 및 I/O 장치에 대한 정보

문맥 교환

문맥 (context): 현재 프로세스의 실행 상태를 나타내는 정보
문맥 교환 (context switching): 실행 중인 프로세스의 문맥을 PCB에 백업하고, 새로 실행할 프로세스의 문맥을 PCB에서 복원하는 과정. CPU가 다른 프로세스로 전환될 때 필요함.

프로세스의 메모리 영역

프로세스가 생성되면 커널 영역에 PCB가 생성되고, 사용자 영역에는 코드/데이터/힙/스택 영역에 나누어 저장됨.

정적 할당 영역:

  • 코드 영역 (code segment): 명령어들이 저장되는 영역. read-only
  • 데이터 영역 (data segment): 실행 동안 유지되는 데이터 저장 (전역 변수, 정적 변수)

동적 할당 영역:

  • 힙 영역 (heap segment): 동적으로 할당된 메모리가 저장되는 영역. 프로그래머가 필요할 때 메모리를 할당하고, 사용이 끝나면 반환해야 함. 반환되지 않은 메모리는 메모리 누수를 초래함. 일반적으로 낮은 주소에서 높은 주소로 확장
  • 스택 영역 (stack segment): 일시적인 데이터 저장(매개 변수, 지역 변수 등). 일반적으로 높은 주소에서 낮은 주소로 확장

힙과 스택 영역은 서로 다른 방향으로 메모리를 확장하여 충돌하지 않도록 함.

프로세스 상태

  • 생성 상태 (new): 프로세스를 생성 중인 상태. PCB를 할당받은 상태
  • 준비 상태 (ready): CPU 할당을 기다리는 상태
  • 실행 상태 (running): CPU를 할당 받아 실행 중인 상태. 일정 시간만 사용 가능하며, 할당된 시간을 사용하면 타이머 인터럽트가 발생해 다시 준비 상태가 됨. 실행 도중 I/O 장치를 사용하여 작업을 기다려야 할 경우 대기 상태가 됨.
  • 대기 상태 (blocked): I/O 장치의 작업을 기다리는 상태. I/O 작업이 완료되면 해당 프로세스는 다시 준비 상태가 됨.
  • 종료 상태 (terminated): 프로세스가 종료된 상태. OS는 PCB와 프로세스가 사용한 메모리를 정리함.

<프로세스 다이어그램>

프로세스 계층 구조

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있음.
부모 프로세스 (parent process): 새 프로세스를 생성한 프로세스
자식 프로세스 (child process): 부모 프로세스에 의해 생성된 프로세스. 일부 OS에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID가 저장됨.

이러한 생성 과정이 반복되어 여러 프로세스가 트리 구조로 구성되며, 이를 프로세스 계층 구조라고 함.

컴퓨터 부팅 시 최초의 프로세스가 실행되며, 이를 기준으로 모든 프로세스가 생성됨.
예를 들어, 유닉스 계열 OS에서는 init, 리눅스에서는 systemd, macOS에서는 launchd가 최초의 프로세스로 작동하며, 이들의 PID는 일반적으로 1번임.

프로세스 생성 기법

  • fork: 부모 프로세스의 복사본을 자식 프로세스로 생성하는 시스템 호출. 생성된 자식 프로세스는 고유한 PID를 가짐.
  • exec: 현재 메모리 공간의 내용을 새로운 프로그램으로 덮어쓰는 시스템 호출. 호출 시 프로세스는 새로운 프로그램을 실행하며, 코드 영역과 데이터 영역이 새로 덮어씌워지고 나머지 영역은 초기화됨.

이러한 시스템 호출을 통해 프로세스 계층 구조가 형성됨.

프로세스와 스레드

단일 스레드 프로세스: 한 번에 하나의 작업을 처리하는 프로세스
스레드: 프로세스를 구성하는 실행의 흐름 단위. 스레드 개념이 도입되면서 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있게 되었으며, 이를 멀티스레드 프로세스라고 함.

스레드는 프로세스 내에서 서로 독립된 스레드 ID, 레지스터 값, 스택을 가짐. 스레드는 프로세스 자원을 공유하므로 동일한 메모리 공간을 사용하고, 열린 파일 등도 공유함.

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

멀티프로세스:

  • 여러 개의 프로세스가 독립적으로 실행됨.
  • 각 프로세스는 고유한 주소 공간을 가지며 자원을 공유하지 않음.
  • 프로세스 간 통신(IPC)이 비교적 복잡함.
  • 한 프로세스에 문제가 생기면 다른 프로세스에 영향을 미치지 않음.

멀티스레드:

  • 하나의 프로세스 내에서 여러 스레드가 실행됨.
  • 프로세스의 자원(코드, 데이터, 힙 영역 등)을 공유하여 메모리를 효율적으로 사용할 수 있음.
  • 스레드 간 통신이 간단함.
  • 한 스레드에 문제가 발생하면 다른 스레드에도 영향을 미칠 수 있음.

Ch11. CPU 스케줄링

CPU 스케줄링: OS가 여러 프로세스에 CPU 자원을 공정하고 효율적으로 배분하는 과정

프로세스 우선순위

대부분의 프로세스들은 CPU와 I/O장치를 모두 사용하며, 이를 반복적으로 수행함.
입출력 집중 프로세스 (I/O bound process): 입출력 버스트(I/O 장치를 기다리는 작업)가 많은 프로세스. ex) 비디오 재생, 디스크 백업 작업
-> 실행 상태 < 대기 상태
CPU 집중 프로세스 (CPU bound process): CPU 버스트(CPU를 이용하는 작업)기 많은 프로세스. ex) 수학 연산, 컴파일
-> 실행 상태 > 대기 상태

CPU 집중 프로세스와 입출력 집중 프로세스가 동시에 CPU 자원을 요구할 때, 입출력 집중 프로세스를 빨리 실행시켜 I/O 장치를 끊임없이 작동시키고, 그 다음 CPU 집중 프로세스에 집중적으로 CPU를 할당하는 것이 효율적임.
OS는 각 프로세스에 우선순위를 부여하여 더 중요한 작업을 먼저 처리할 수 있도록 함. 우선순위는 각 프로세스의 PCB에 기록되어 이를 기준으로 먼저 처리할 프로세스를 결정함.

스케줄링 큐

OS는 프로세스가 CPU를 사용하거나, 메모리에 적재되거나, 특정 I/O 장치를 사용하기를 기다리는 상황을 스케줄링 큐로 관리함.

  • 준비 큐 (ready queue): CPU를 사용하기 위해 기다리는 프로세스들이 대기하는 큐
  • 대기 큐 (waiting queue): I/O 장치를 이용하기 위해 대기 상태로 들어간 프로세스들이 대기하는 큐. I/O 작업이 완료되면 PCB가 준비 상태로 변경되고, 큐에서 제거된 후 준비 큐로 이동함.

OS는 PCB들이 큐에 삽입된 순서대로 프로세스를 실행하되, 그중 우선순위가 높은 프로세스를 먼저 실행함.

선점형과 비선점형 스케줄링

  • 선점형 스케줄링 (preemptive scheduling): 하나의 프로세스가 자원을 독점할 수 없는 스케줄링 방식. 프로세스마다 CPU 사용 시간 제한이 있으며, 이를 초과하면 OS가 타이머 인터럽트를 통해 CPU 점유를 종료하고 다음 프로세스에 CPU를 할당함.

    • 장점: 한 프로세스의 독점을 막고 프로세스들에 골고루 자원을 배분할 수 있음.
    • 단점: 잦은 문맥 교환으로 오버헤드 발생할 수 있음.
  • 비선점형 스케줄링 (non-preemptive scheduling): 하나의 프로세스가 자원을 독점할 수 있는 스케줄링 방식. 자원을 다 사용할 때까지 다른 프로세스에 자원을 빼앗기지 않음.

    • 장점: 문맥 교환에 따른 오버헤드 발생 가능성 적음.
    • 단점: 모든 프로세스가 골고루 자원을 사용할 수 없음.

CPU 스케줄링 알고리즘

  • FCFS 스케줄링 (First Come First Served)

    • 선입 선처리 스케줄링
    • 준비 큐에 삽입된 순서대로 CPU 할당하는 비선점형 방식
    • 호위 효과 발생
      * 호위효과 (convooy effect): 처리 시간이 긴 프로세스가 CPU를 차지하여 효율이 떨어지는 현상
  • SJF 스케줄링 (Shortest Job First)

    • 최단 작업 우선 스케줄링
    • 작업 시간이 짧은 프로세스부터 CPU 할당하는 방식
    • 비선점형 방식으로 주로 구현되지만, 선점형으로 구현될 수도 있음(SRT).
    • 호위 효과 완화
    • 아사 현상(기아 현상) 발생
      * 아사 현상: 작업 시간이 긴 큰 작업이 계속 뒤로 밀리는 현상
  • 라운드 로빈 스케줄링 (round robin)

    • FCFS + 타임 슬라이스 개념
    • 타임 슬라이스(한 프로세스가 할당받은 시간) 동안 돌아가며 CPU 할당하는 선점형 방식
  • SRT 스케줄링 (Shortest Remaining Time)

    • 최소 잔여 시간 우선 스케줄링
    • 선점형 SJF + 라운드 로빈
    • 타임 슬라이스만큼 CPU를 할당하되, 항상 남은 작업 시간이 적은 프로세스를 선택하는 방식
  • 우선순위 스케줄링 (Priority)

    • 우선순위가 가장 높은 프로세스에 먼저 CPU 할당하는 방식
    • 아사 현상을 예방하기 위해 에이징 기법 사용
      * 에이징 (aging): 오래 기다리는 프로세스의 우선순위를 점진적으로 높여주는 기법
  • 다단계 큐 스케줄링 (Multilevel Queue)

    • 우선순위에 따라 준비 큐를 여러 개 사용하는 방식
    • 큐마다 다른 스케줄링 알고리즘을 사용할 수 있음.
    • 아사 현상 발생
  • 다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue)

    • 다단계 큐 스케줄링의 변형으로, 프로세스들이 큐 사이를 이동할 수 있는 방식
    • 프로세스가 낮은 우선순위의 큐에서 오래 대기하면 점차 우선순위가 높은 큐로 이동시키는 에이징 기법을 적용

기본 문제

p.304 확인 문제 1번

1: 생성 상태, 2: 준비 상태, 3: 실행 상태, 4: 종료 상태, 5: 대기 상태


추가 숙제

Q. 준비 큐에 A, B, C, D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당 받는가?

선입 선처리 스케줄링은 준비 큐에 삽입된 순서대로 프로세스들을 처리하므로
A - B - C - D 순으로 CPU를 할당 받는다.

0개의 댓글