Skip to main content

Command Palette

Search for a command to run...

[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

Published
7 min read
[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

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

  • 운영체제 : 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

    • (시스템) 자원 : 프로그램 실행에 마땅히 필요한 요소

    • 컴퓨터가 부팅될 때 메모리 내 커널 영역에 적재

      • 사용자 영역 : 사용자가 이용하는 응용 프로그램이 적재되는 영역

⇒ 메모리 공간에 주소가 겹치지 않게 프로그램 적재해 준 건? 운영체제

  • 실행할 프로그램 메모리에 적재

  • 실행되지 않는 프로그램 메모리에서 삭제

→ 지속적으로 메모리 자원 관리

  • 응용 프로그램에 자원 효율적 분배

  • 관리할 자원별로 기능이 나누어짐


⇒ 왜 운영체제를 알아야 할까?

  • 운영체제가 하드웨어를 조작하고 관리하는 기능을 제공하기 때문에 하드웨어 상에 문제가 있으면 알려줌.

    • 오류 메시지

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

  • 커널 : 운영체제의 핵심 서비스 담당하는 부분

    1. 자원에 접근하고 조작하는 기능

    2. 프로그램이 올바르고 안전하게 실행되게 하는 기능

  • 커널에 포함되지 않는 서비스

    • 사용자 인터페이스(User Interface)

      • 그래픽 유저 인터페이스 : 그래픽 기반

      • 커맨드 라인 인터페이스 : 명령어 기반


⇒ 운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원 보호

  • 이중 모드 : CPU가 명령어를 실행하는 모드를 사용자 모드, 커널 모드로 구분하는 방식

    • 사용자 모드 : 운영체제 서비스를 제공받을 수 없는 실행 모드

      • 일반적인 응용 프로그램, 하드웨어 자원에 접근하는 명령어 사용할 수 없음(자원 접근 X)
    • 커널 모드 : 운영체제 서비스를 제공받을 수 있는 실행 모드

      • 커널 영역의 코드 실행, 자원에 접근하는 명령어 실행 가능

→ 플래그 레지스터 속 슈퍼바이저 플래그로 CPU가 알 수 있다.

  • 시스템 호출 : 운영체제 서비스를 제공받기 위한 요청, 커널 모드로 전환

    • 소프트웨어 인터럽트

    • 시스템 호출 발생 → 작업 백업 → 커널 모드 전환 → 작업 완료 → 기존 프로그램 복귀


운영체제의 핵심 서비스

  • 프로세스 관리

  • 자원 접근 및 할당

    • CPU

    • 메모리

    • 입출력장치

  • 파일 시스템 관리

10-1) 프로세스 개요

  • 프로세스 : 메모리에 적재되어 실행 중인 프로그램

    • 포그라운드 프로세스 : 사용자가 보는 앞에서 실행되는 프로세스

    • 백그라운드 프로세스 : 사용자가 보지 못하는 뒤편에서 실행되는 프로세스

      • 사용자와 직접 상호작용 O

      • 사용자와 직접 상호작용 X

        • 유닉스 체계 : 데몬

        • 윈도우 : 서비스


⇒ 운영체제는 프로세스 제어 블록 (PCB)를 이용하여

  • 프로세스의 실행 순서 관리

  • 프로세스에 CPU를 비롯한 자원 배분

  • PCB

    • 프로세스와 관련된 정보를 저장하는 자료 구조

    • 커널 영역에 생성

    • 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기

  • 프로세스 ID(PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호

  • 레지스터 값 : 해당 프로세스가 실행하며 사용했던 프로그램 카운터르 비롯한 레지스터 값

  • 프로세스 상태 : 현재 프로세스의 상태

  • CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

  • 메모리 관리 정보 : 메모리에 저장된 위치(주소), 베이스 레지스터, 한계 레지스터 값, 페이지 테이블 정보

  • 사용한파일과 입출력장치 목록 : 어떤 입출력장치, 어떤 파일을 사용했는지에 대한 정보


  • 문맥 교환 : 기존 프로세스의 문백을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB부터 복구하여 새로운 프로세스를 실행하는 것

    • 문맥 : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보

    • 문맥 교환은 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리


  • 프로세스의 메모리 영역

    • 정적 할당 영역

      • 코드 영역 = 텍스트 영역 : 실행할 수 있는 기계어로 이루어진 명령어, 읽기 전용(read-only)공간

      • 데이터 영역 : 프로그램이 실행되는 동안 유지할 데이터, 전역 변수

    • 동적 할당 영역

      • 힙 영역 : 프로그래머가 직접 할당할 수 있는 저장 공간

        • 할당했으면 반드시 반환해야 함 → 메무리 누수로 이어질 수 있음
      • 스택 영역 : 데이터를 일시적으로 저장하는 공간, 매개변수, 지역 변수

⇒ 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당, 스택 영역은 높은 주소에서 낮은 주소로 할당

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

  • 생성 상태 (new) : 메모리에 적재되어 PCB를 할당받은 상태. 곧바로 실행X, 준비상태로 CPU 할당 기다림

  • 준비 상태(ready) : CPU를 할당받아 실행할 수 있는 상태, 자기 차례 아니라 기다리는 상태

  • 디스패치 : 준비 상태 → 실행 상태

  • 실행 상태(running) : CPU를 할당받아 실행중인 상태

    • 타이머 인터럽트(할당된 시간을 모두 사용)가 발생하면 → 다시 준비 상태

    • 입출력 장치 사용해서 작업이 끝날 때까지 기다려야 하면 → 대기 상태

  • 대기 상태(blocked) : 입출력 장치의 작업을 기다리는 상태

    • 작업이 완료되면 → 다시 준비 상태
  • 종료 상태(terminated) : 프로세스가 종료된 상태, 운영체제는 PCB와 메모리 정리함.


⇒ 프로세스는 실행 도중 호출을 통해 다른 프로세스를 생성할 수 있다.

  • 부모 프로세스 : 새 프로세스를 생성한 프로세스

  • 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스

  • 각기 다른 PID, 자식 프로세스에는 부모 프로세스의 PID인 PPID가 기록되기도 함.

→ 운영체제는 계층적인 구조로 프로세스들을 관리한다.

  • 데몬이나 서비스 또한 최초 프로세스의 자식 프로세스

    • 그럼 최초 서비스는 뭐야?

      • 유닉스 운영체제 : init

      • 리눅스 : systemd

      • macOS : launchd

    • 항상 PID 1번!


  • 프로세스 생성 기법

    • 시스템 호출

      • fork : 자신의 복사본을 자식 프로세스로 생성

      • exec : 자신의 메모리 공간을 다른 프로그램으로 교체

        • 자신의 메모리 공간을 새로운 프로그램으로 덮어씀

⇒ 부모가 자식 프로세스를 실행하며 프로세스 계층 구조를 이루는 과정은 fork과 exec가 반복되는 과정

  • fork 한 뒤에 exec를 호출하지 않는 경우

    • 부모 프로세스와 자식 프로세스는 같은 코드를 병행하여 실행하는 프로세스

10-3) 스레드

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

    • 하나의 프로세스는 여러 개의 스레드를 가질 수 있음
  • 단일 스레드 프로세스 : 프로세스가 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행

  • 멀티 스레드 프로세스 : 프로세스를 구성하는 여려 명령어를 동시에 실행

스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성

→ 스레드들은 실행에 필요한 최소한 정보만을 유지한 채 프로세스 자원을 공유하며 실행


  • 멀티프로세스 : 여러 프로세스를 동시에 실행하는 것

  • 멀티 스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것

⇒ 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유


  • 멀티 프로세스는 프로세스를 fork하여 작업을 하면 코드, 데이터, 힙 영역 등 모든 자원이 복제되어 메모리에 적재됨 → 메모리에 동일 내용들이 중복해서 존재, 낭비

    ⇒ 쓰기 시 복사기법으로 중복 저장하지 않는 방법 존재

  • 멀티 스레드는 동일한 주소 공간의 코드, 데이터, 힙 영역 공유, 열린 파일과 같은 프로세스 자원 공유

    • 메모리 효율적 사용

    • 그대신 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다.


  • 프로세스 간 통신(IPC) : 프로세스끼리는 기본적으로 자원을 공유하지 않지만 프로세스 간의 자원을 공유하고 데이터를 주고 받을 수 있다.

    • 파일을 통한 프로세스 간 통신

    • 공유 메모리 : 프로세스들이 공유할 수 있는 메모리 영역

    • 소켓, 파이프

11-1) CPU 스케줄링 개요

  • CPU 스케줄링 : 운영체제가 프로세스에게 공정하고 합리적으로 CPU 자원을 배분

    • 우선순위
  • 입출력 집중 프로세스 : 실행 상태보다는 입출력을 위한 대기 상태에 더 많이 머무름.

    • 입출력 버스트
  • CPU 집중 프로세스 : 대기 상태보다는 실행 상태에 더 많이 머무름.

    • CPU 버스트

  • 스케줄링 큐 : CPU를 사용하고 싶은 프로세스들, 메모리에 적재되고 싶은 프로세스들, 특정 입출력장치를 사용하고 싶은 프로세스들을 모두 줄세우는 것.

    • 스케줄링에서의 큐는 반드시 선입선출 방식일 필요 없음.
  • 준비 큐 : CPU를 이용하고 싶은 프로세스들이 서는 줄

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


  • 선점형 스케줄링: 어느 하나의 프로세스가 자원 사용을 독점할 수 없다., 더 급한 프로세스가 언제든 끼어들 수 있음.

    • 오버헤드 발생할 수 있다.
  • 비선점형 스케줄링: 하나의 프로세스가 자원 사용을 독점할 수 있음. 무작정 기다려야 함.

    • 모든 프로세스가 골고루 자원을 사용할 수 없다.

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

  • 선입 선처리 스케줄링(FCFS 스케줄링) : 준비큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링

    • 호위 효과 : 프로세스들이 기다리는 시간이 매우 길어질 수 있음.
  • 최단 작업 우선 스케줄링(SJF 스케줄링) : 호위 효과 방지, 준비큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장짧은 프로세스부터 실행, 비선점형 스케줄링

  • 라운드 로빈 스케줄링 : 선입 선처리 스케줄링 + 타임 슬라이스, 선점형 스케줄링

    • 타임 슬라이스 : 각 프로세스가 CPU를 사용할 수 있는 정해진 시간 의미

      • 타임 슬라이스의 크기가 매우 중요

      • 지나치게 크면 → 호위 효과 생길 여지, 지나치게 작으면 → 문맥 교환 발생 비용

    • 정해진 시간을 모두 사용했는데 작업이 완료되지 않으면 문맥 교환으로 다시 큐의 맨 뒤에 삽입

  • 최소 잔여 시간 우선 스케줄링(SRT 스케줄링) : 최단 작업 우선 스케줄링 + 라운드 로빈 알고리즘

    • 각 프로세스들이 정해진 타임 슬라이스만큼 CPU 사용하되 CPU를 사용할 다음 프로세스는 남은 시간이 가장 적은 프로세스가 선택
  • 우선순위 스케줄링 : 프로세스들에 우선순위 부여, 가장 높은 우선순위부터 실행

    • 기아 현상 : 우선순위가 낮은 프로세스들은 계속 연기됨.

    • 에이징 : 기아현 상 방지, 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식

  • 다단계 큐 스케줄링 : 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링

    • 큐별로 타임 슬라이스 여러 개, 다른 스케줄링 알고리즘 사용 가능

    • 프로세스들이 큐 사이를 이동 불가능

  • 다단계 피드백 큐 스케줄링 : 다단계 큐와 비슷하지만 프로세스들이 큐 사이를 이동할 수 있다는 점이 차이

    • CPU를 오래 사용해야 하는 프로세스는 점차 우선순위가 낮아짐.

      • 입출력 집중 프로세스들이 자연스레 우선순위가 높은 큐에서 실행이 끝남.
    • 에이징 기법으로 기아 현상 예빵 가능

    • 가장 일반적인 CPU 스케줄링 알고리즘

숙제!

  • P 304, 1번

    1. 생성 new

    2. 준비 ready

    3. 실행 running

    4. 종료 terminated

    5. 대기 blocked

More from this blog

[혼공후기] 재밌으면서도 알찼던 6주! 14기 활동 회고

매번 혼공 학습단을 신청해 봐야겠다고 했지만 기간 놓쳐버리기…또는 너무 바쁜 나머지 완주 못할 것 같아서 포기하다가 때마침 공부가 필요한 시기에 시간이 나서 신청하게 되었다. 공부할 새 책도 배송이 오고 완주할 생각에 기대감 상승. (+중간에 간식 먹을 생각) 참고할 수 있는 강의 영상이 있기 때문에 영상강의 보면서 책 필기 및 정리 이해한 내용을 바탕으로 블로그 정리 이런 방식으로 공부를 했다. 사실 하루에 조금씩 공부했으면 적당한 ...

Aug 23, 20252 min read

[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

14-1) 연속 메모리 할당 연속 메모리 할당 : 프로세스에 연속적인 메모리 공간을 할당하는 방식 스와핑 : 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 → 스와핑을 이용하면 프로세스들이 요구하는 메모...

Aug 16, 20259 min read
[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

12-1) 동기화란 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행된다. ⇒ 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기에 반드시 동기화가 필수 프로세스 동기화 : 프로세스들 사이의 수행 시기를 맞추는 것 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기 공유가 불가능한 자원의 동시 사용을 피하...

Aug 9, 20255 min read
[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)

06-1) RAM의 특징과 종류 RAM 휘발성 저장 장치 실행할 대상 저장 보조기억장치 비휘발성 저장 장치 보관할 대상 저장 CPU는 보조기억장치에 직접 접근하지 못하고 RAM으로 복사하여 저장한 뒤 실행. RAM 용량이 적으면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어지기 때문에 RAM용량이 충분히 크면 많은 데이터를 가져와 미리 RAM에 저장하여 프로그램들을 동시에 빠르게 실행하는데 유리하다...

Jul 19, 20258 min read
[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)
W

WOW's dev archive

42 posts

언젠가 나에게 힘이 될 차곡차곡 쌓은 기록🥰