[혼공학습단] 컴퓨터 구조 + 운영체제 4주차 (chapter 09~11)

royalmilktea·2023년 7월 30일
0
post-thumbnail

Chapter 9. 운영체제 시작하기

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

  • 운영체제는 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.
  • 운영체제와의 대화를 통해 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있다.

09-2 운영체제의 큰 그림

운영체제의 심장, 커널

  • 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다.
  • 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스도 있는데, 대표적으로 사용자 인터페이스가 있다.
  • 사용자 인터페이스
    - 그래픽 유저 인터페이스: 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
    - 커맨드 라인 인터페이스: 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스

이중모드와 시스템 호출

  • 이중모드(dual mode)란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.
    - 사용자 모드: 운영체제 서비스를 제공받을 수 없는 실행 모드. 즉, 커널 영역의 코드를 실행할 수 없는 모드
    - 커널 모드: 운영체제 서비스를 제공받을 수 있는 모드. 즉, 커널 영역의 코드를 실행할 수 있는 모드
  • 시스템 호출이란 운영체제 서비스를 제공받기 위한 요청을 말하며 일종의 소프트웨어적인 인터럽트이다.

운영체제의 핵심 서비스

  1. 프로세스 관리
  2. 자원 접근 및 할당
  3. 파일 시스템 관리

Chapter 10. 프로세스와 스레드

10-1 프로세스 개요

'실행 중인 프로그램'을 프로세스라 한다.

프로세스 제어 블록

  • 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분한다. 이를 위해 운영체제는 프로세스 제어 블록(PCB)을 이용한다.
  • PCB는 프로세스와 관련된 정보를 저장하는 자료 구조이다. 아래는 PCB에 저장되는 대표적인 정보이다.
    - 프로세스 ID(PID)
    - 레지스터 값
    - 프로세스 상태
    - CPU 스케줄링 정보
    - 메모리 관리 정보
    - 사용한 파일과 입출력장치 목록

문맥 교환

문맥이란 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 말한다. 기존 프로세스 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로 부터 복구하여 새로운 프로세스를 실행하는 것을 문맥 교환이라고 한다.

프로세스의 메모리 영역

프로세스가 생성되면 커널 영역에 PCB가 생성된다. 하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

<정적 할당 영역>

  • 코드 영역: 코드 영역은 텍스트 영역이라고도 부른다. 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다.(읽기 전용 공간)
  • 데이터 영역: 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다. 이런 데이터로는 전역 변수가 대표적이다.

<동적 할당 영역>

  • 힙 영역: 프로그래머가 직접 할당할 수 있는 저장 공간이다.
  • 스택 영역: 데이터를 일시적으로 저장한느 공간이다.

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

프로세스 상태

  • 생성 상태: 프로세스를 생성 중인 상태, 이제 막 메모리에 적재되어 PCB를 할당받은 상태를 말한다.
  • 준비 상태: CPU를 할당받아 실행할 수 있지만, 기다리고 있는 상태.
  • 실행 상태: CPU를 할당받아 실행 중인 상태. 이때 프로세스가 할당된 시간을 모두 사용한다면(타이머 인터럽트가 발생하면) 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하여 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다.
  • 대기 상태: 프로세스는 실행 도중 입출력 장치를 사용하는 경우가 있다. 입출력 작업은 CPU에 비해 처리 속도가 느리기에, 입출력 작업을 요청한 프로세스는 작업을 끝날 때 까지(입출력 완료 인터럽트를 받을 때까지) 기다려야 한다. 이렇게 입출력장치의 작업을 기다리는 상태를 대기 상태라고 한다.
  • 종료 상태: 프로세스가 종료된 상태이다. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.

    위와 같은 도표를 프로세스 상태 다이어그램이라고 한다. 이처럼 컴퓨터 내의 여러 프로세스는 생성, 준비, 실행, 대기, 종료 상태를 거치며 실행된다. 운영체제는 이 상태를 PCB에 기록하며 프로세스들을 관리한다.

프로세스 계층 구조

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다. 이때 새 프로세스를 생성한 프로세스를 부모 프로세스, 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스라고 한다.

실행되는 최초의 프로세스가 자식 프로세스들을 생성하고, 생성된 자식 프로세스들이 새로운 프로세스들을 낳는 형식으로 여러 프로세스가 실행되는데 이 과정을 도표로 그리면 트리 구조를 띄고, 이를 프로세스 계층 구조라 한다.

프로세스 생성 기법

부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성해내고, 만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.

스레드

스레드란 프로세스를 구성하난 실행의 흐름 단위이다.

프로세스와 스레드

프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다. 프로세스의 자원을 공유한다는 것이 스레드의 핵심이다.

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

  • 여러 프로세스를 동시에 실행하는 것을 멀티프로세스, 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라고 한다.
  • 프로세스끼리 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다.

Chapter 11. CPU 스케줄링

11-1 CPU 스케줄링 개요

운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하느 것을 CPU 스케쥴링이라고 한다.

프로세스 우선순위

프로세스의 중요도에 맞게 프로세스가 CPU를 이용할 수 있도록 하기 위해 운영체제는 프로세스마다 우선순위를 부여한다. 운영체제는 각 프로세스의 PCB에 우선순위를 명시하고, PCB에 적힌 우선순위를 기준으로 먼저 처리할 프로세스를 결정한다.

스케줄링 큐

CPU를 사용하고 싶은 프로세스들, 메모리에 적재되고 싶은 프로세스들, 특정 입출력장치를 사용하고 싶은 프로세스들을 모두 줄세우는 것. 그리고 운영체제는 이 줄을 스케줄링 큐로 구현하고 관리한다.

대표적인 큐

  • 준비 큐: CPU를 이용하고 싶은 프로세스들이 서는 줄
  • 대기 큐: 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄

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

  • 선점형 스케줄링
    - 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식을 의미한다.
  • 비선점형 스케줄링
    - 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들어 가기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식을 의미한다.

11-2 CPU 스케줄링 알고리즘

스케줄링 알고리즘의 종류

  1. 선입 선처리 스케줄링
    FCFS 스케줄링(First Come First Served Scheduling)이라고도 부른다. 이는 단순히 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식이다. CPU를 오래 사용하는 프로세스가 먼저 도착하면 다른 프로세스는 그 프로세스가 CPU를 사용하는 동안 무작정 기다리는 수밖에 없다. 때때로 프로세스들이 기다리는 시간이 매우 길어질 수 있다는 점에서 부작용이 있는 방식이다. 이런 현상을 호위 효과라고 한다.

  2. 최단 작업 우선 스케줄링
    준비 큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행하는 스케줄링 방식을 최단 작업 우선 스케줄링 혹은 SJF 스케줄링 이라고 한다.

  3. 라운드 로빈 스케줄링
    선입 선처리 스케줄링에 타임 슬라이스라는 개념이 더해진 스케줄링 바식이다. 타임 슬라이스란 각 프로세스가 CPU를 사용할 수 있는 정해진 시간을 의미한다. 즉, 정해진 타임 슬라이스만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링이다.

  4. 최소 잔여 시간 우선 스케줄링
    프로세스들은 정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스로는 남아있는 작업 시간이 가장 적은 프로세스가 선택된다.

  5. 우선순위 스케줄링
    프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘이다. 우선순위가 낮은 프로세스는 우선순위가 높은 프로세스들에 의해 실행이 계속해서 연기될 수 있는데 이를 기아 현상이라고 한다.
    이를 방지하기 위한 대표적인 기법으로 에이징이 있다. 이는 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식으로 대기중인 프로세스의 우선순위를 마치 나이 먹듯 점차 증가시키는 방법이다.

  6. 다단계 큐 스케줄링
    우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식이다. 큐를 여러개 두면 프로세스 유형별로 우선순위를 구분하여 실행하는 것이 편리해진다. 또한 큐별로 타임 슬라이스를 여러 개 지정할 수 있고, 큐마다 다른 스케줄링 알고리즘을 사용할 수도 있다.

  7. 다단계 피드백 큐 스케줄링
    다단계 피드백 큐 스케줄링은 다단계 큐 스케줄링과 비슷하게 작동하지만, 프로세스가 큐 사이를 이동할 수 있다는 점이 특징이다. 만약 프로세스가 해당 큐에서 실행이 끝나지 않는다면 다음 우선순위 큐에 삽입되고, 결국 CPU를 오래 사용해야 하는 프로세스는 점차 우선순위가 낮아진다. 다단계 피드백 큐 스케줄링은 구현이 복잡하지만, 가장 일반적인 CPU 스케줄링 알고리즘으로 알려져 있다.

📌기본 미션: p.304의 확인 문제 1번 풀고 인증하기

2개의 댓글

comment-user-thumbnail
2023년 7월 30일

잘 봤습니다. 좋은 글 감사합니다.

1개의 답글