반효경 운영체제 - 1~3차시

doxxx·2023년 6월 4일
0
post-thumbnail

운영체제 개요

운영체제란 무엇인가

Operating System, OS

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층

  • 운영 체제의 목적 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
    • 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공

    • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행

      *컴퓨터 시스템의 자원을 효율적으로 관리 ***

    • CPU, 메모리, I/O 장치 등의 효율적 관리

      • 실행중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당
      • 실행중인 프로그램들에 메모리 공간을 적절히 분배$
      • 주어진 자원으로 최대한의 성능을 내도록 → 효율성
      • 특성 사용자/프로그램의 지나친 불이익이 발생하지 않도록 → 형평성
    • 사용자 및 운영체제 자신의 보호

  • 컴퓨터 시스템의 구조

  • 운영체제의 기능
어떤 프로그램에게 CPU 사용권을 줄까? → CPU 스케줄링
디스크에 들어온 요청을 어떤 순서로 처리할까? → 디스크 스케줄링
한정된 메모리를 어떻게 쪼개어 쓰지? → 메모리관리
빠른 CPU와 느린 I/O 장치간 속도차를 어떻게 극복하지? → 인터럽트, 캐싱
  • 프로세스의 상태

CPU 스케줄링

  1. FCFS(First-Come First-Served)

    1. 먼저 온 사람 먼저 보내기

    → 먼저 온 사람이 소요 시간이 길면, 효율적이지 않다고 느낌 → 그래서 CPU를 짧게 쓰는 사람에게 준다

  2. SJF(Shortest-Job-First)

    1. 금번 CPU 사용시간이 가장 짧은 프로세스를 제일 먼저 스케줄
    2. minimum average waiting time 보장

    → 효율성은 좋지만, 형평성이 좋지 않음 → Srarvation(기아 현상) 발생 가능 (CPU 사용시간이 긴 프로세스는 실행되지 않을 수도 있음)

  3. RR(Round Robin)

    1. 각 프로세스는 동일 크기의 CPU 할당시간을 가짐
    2. 할당 시간이 끝난 프로세스는 CPU를 빼앗기고 CPU 큐의 제일 뒤에 줄을 섬(라운드 로빈 알고리즘?)
    3. n개의 프로세스 → (n-1)*할당시간 이상 기다리지 않음(효율성) / 대기시간이 프로세스의 CPU 사용시간에 비례(형평성)

메모리 관리

프로그램을 실행시키면 메모리에 올라가는 주소가 매겨지고, 본인만의 메모리 공간을 형성 후(가상 메모리) → 물리적인 메모리에는 당장 필요한 부분만 올라가게 됨.
→ 물리적인 메모리가 모두 차버리면 필요없는 부분은 디스크의 스왑영역으로 보내고 관리함(전원 꺼지면 스왑영역 비워버림)

미래를 모른다는 가정하에 효율적으로 사용해야 함. 사용할 가능성이 높거나 자주 사용된걸 우선으로 메모리에 남겨둠.

  1. LRU(가장 오래 전에 사용한 것 삭제)
  2. LFU(가장 덜 사용한 것 삭제)

디스크 스케줄링

  1. 디스크 접근시간의 구성
    1. 탐색 시간(Seek Time) *가장 많은 시간 소요→ 헤드를 해당 트랙(실린더)으로 움직이는데 걸리는 시간
    2. 회전 지연(Rotatinal Latency) →헤드가 원하는 섹터에 도달하기 까지 걸리는 시간
    3. 전송시간(Transfer Time) → 실제 데이터의 전송시간
  2. SCAN
    1. 헤드가 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리
    2. 다른 한쪽 끝에 도달하면 역방향으로 이동, 오는 길목에 있는 모든 요청을 처리하며 다시 반대쪽 끝으로 이동한다.

저장장치 계층구조와 캐싱(caching)

가격, 휘발성, 속도 등으로 구분. 초록색은 가격이 비싼 대신 빠르고, 휘발성임. 컴퓨터 내부 / 빨강은 반대.

  1. 플래시 메모리 → 모바일장치에 쓰기 좋음, 전력소모 작고 충격에 강하고 가볍고 작고 …

    1. 반도체장치(↔ 하드디스크 : 마그네틱)
    2. NAND형(스토리지), NOR형(임베디드 코드 저장용)

    메모리 스틱, SD카드, SSD 등등 …

컴퓨터시스템의 구조

운영체제의 분류

  1. 동시 작업 가능 여부
    1. 단일 작업(single tasking) → 한 번에 하나의 작업만 처리
    2. 다중 작업(multi tasking) → 동시에 두 개 이상의 작업 처리
  2. 사용자의 수
    1. 단일 사용자(single user)
    2. 다중 사용자(multi user)
  3. 처리 방식
    1. 일괄 처리(batch processing)
      • 작업 요청의 일정량 모아서 한꺼번에 처리
      • 작업이 완전 종료될 때까지 기다려야 함
    2. 시분할(time sharing)
      • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
      • 일괄 처리 시스템에 비해 짧은 응답시간을 가짐
      • interactive한 방식
    3. 실시간(Realtime OS)
      • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간시스템을 위한 OS (미사일, 원자로 등등 큰일 나는 애들)
        → 실시간 시스템의 개념 확장 : Hard realtime, Soft realtime

운영체제의 예

유닉스(UNIX)

  • 코드의 대부분을 C언어로 작성
  • 높은 이식성
  • 최소한의 커널 구조
  • 복잡한 시스템에 맞게 확장 용이
  • 소스 코드 공개
  • 프로그램 개발에 용이
  • 다양한 버전(System V, FreeBSD, SunOS, Solaris, Linux)

DOS(Disk Operating System)

  • MS 사에서 1981년 IBM-PC를 위해 개발
  • 단일 사용자용 운영체제, 메모리 관리 능력의 한계

MS Windows

  • MS사의 다중 작업용 GUI 기반 운영 ㅊ제
  • Plug and Play, 네트워크 환경 강화
  • DOS용 응용 프로그램과 호환성 제공
  • 불안정성
  • 풍부한 자원 소프트웨어

컴퓨터 시스템 구조

  • Mode bit 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치 필요 Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원 1 : 사용자 모드 → 사용자 프로그램 수행
    0 : 모니터 모드 → OS 코드 수행(시스템 모드, 커널 모드) 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 ‘특권명령’으로 규정 Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿈
    사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 세팅
  • Timer(CPU의 독점을 막기 위해 사용) 타이머
    • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴

    • 타이머는 매 틀릭 틱 때마다 1씩 감소

    • 타이머 값이 0이 되면 타이머 인터럽트 발생

    • CPU를 특정 프로그램이 독점하는 것으로부터 보호

      타이머는 time sharing을 구현하기 위해 널리 이용됨
      타이머는 현재 시간을 계산하기 위해서도 사용

  • 인터럽트(Interrupt)
    • 현대의 운영체제는 인터럽트에 의해 구동됨
    • 인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
    • 넓은 의미 - 하드웨어 인터럽트, 트랩(Trap, 소프트웨어 인터럽트 : Exception, System call)
  • 시스템콜(System Call)
    • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
  • Device Controller
    • I/O device controller

      • 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
      • 제어 정보를 위해 control register, status register를 가짐
      • local buffer를 가짐(일종의 data register)
    • I/O는 실제 device와 local buffer 사이에서 일어남

    • Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림

      ** device driver(장치 구동기) : OS 코드 중 각 장치별 처리루틴 → software

      ** device controller(장치 제어기) : 각 장치를 통제하는 일종의 작은 CPU → hardware

  • 동기식 입출력과 비동기식 입출력 두 경우 모두 I/O의 완료는 인터럽트로 알려줌
    1. 동기식 입출력(synchronous I/O)

      • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
      • 구현방법 1
        • I/O가 끝날 때까지 CPU를 낭비시킴
        • 매시점 하나의 I/O만 일어날 수 있음
      • 구현방법 2
        • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
        • I/O 처리를 기다리는 줄에 그 프로그램을 줄세움
        • 다른 프로그램에게 CPU줌
    2. 비동기식 입출력(asynchronous I/O)
      - I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

  • DMA(Direct Memory Access)
    • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용

    • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송

    • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

프로그램의 실행(메모리 load)

  • 커널 주소 공간의 내용
  1. 사용자 프로그램이 사용하는 함수

    1. 함수(function)
      1. 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
      2. 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수 / 자신의 프로그램의 실행 파일에 포함되어 있음
      3. 커널 함수 : 운영체제 프로그램의 함수 / 커널 함수의 호출 = 시스템 콜
  2. 프로그램의 실행

프로세스 관리

프로세스의 개념

Process is a program in execution

  • 프로세스의 문맥(context)

    CPU 수행 상태를 나타내는 하드웨어 문맥 : Program Counter, 각종 register

    각종 프로세스의 주소 공간 : code, data, stack

    프로세스 관련 커널 자료구조 : PCB(Process Control Block), Kernel stack

  • 프로세스의 상태(Process State)

    프로세스는 상태가 변경되며 수행된다.

    1. Running : CPU를 잡고 instruction을 수행중인 상태

    2. Ready : CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

    3. Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태, Process 자신이 요청한 event(ex> I/O) 가 즉시 만족되지 않아 이를 기다리는 상태

    4. New : 프로세스가 생성중인 상태 / Terminated : 수행(execution)이 끝난 상태

    5. Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태 / 프로세스는 통쨰로 디스크에 swap out 된다.

      Blocked :자신이 요청한 evend가 만족되면 Ready
      Suspended : 외부에서 resume 해주어야 Active

      프로세스 상태도

  • PCB(Process Control Block)

    운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

    1. OS가 관리상 사용하는 정보
      1. Process state, Process ID
      2. scheduling information, priority
    2. CPU 수행 관련 하드웨어 값
      1. Program counter, registers
    3. 메모리 관련
      1. Code, data, stack의 위치 정보
    4. 파일 관련
      1. Open file descriptors..
  • 문맥 교환(Context Switch)

    CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

    CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

    1. CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장

    2. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

      ** System call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아님

  • 프로세스를 스케줄링 하기 위한 큐

    1. Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합

    2. Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

    3. Device queues : I/O device의 처리를 기다리는 프로세스의 집합

      → 프로세스들은 각 큐를 오가며 수행된다

스케줄러 (Scheduler)

  1. Long-term scheduler(장기 스케줄러 or job scheduler)
    1. 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    2. 프로세스에 memory(및 각종 자원)을 주는 문제
    3. degree of Multiprogramming을 제어
    4. time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)
  2. Short-term scheduler(단기 스케줄러 or CPU scheduler)
    1. 어떤 프로세스를 다음번에 running 시킬지 결정
    2. 프로세스에 CPU를 주는 문제
    3. 충분히 빨라야 함(milisecond단위)
  3. Medium-term scheduler(중기 스케줄러 or Swapper)
    1. 여유공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    2. 프로세스에게서 memory를 뺏는 문제
    3. degree of Multiprogramming을 제어

프로세스 상태도

Thread

A thread (of lightweight process) is a basic unit of CPU utilization

  • Thread의 구성 program counter
    register set
    stack space
  • Thread가 동료 thread와 공유하는 부분(=task) code section
    data section
    OS resources

→ 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.

→ 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리 할 수 있다.
→ 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
→ 스레드를 사용하면 병렬성을 높일 수 있다

  • Benefits of Threads(스레드 장점)
    1. Responsiveness(응답성)
    2. Resource Sharing
    3. Economy
    4. Utilization of MP Architectures(병렬성 추구 ~)

프로세스 생성(Process Creation)

  1. 부모 프로세스가 자식 프로세스 생성
  2. 프로세스의 트리(계층 구조) 형성
  3. 프로세스는 자원을 필요로 함
    1. 운영체제로부터 받는다
    2. 부모와 공유한다
  4. 자원의 공유
    1. 부모와 자식이 모든 자원을 공유하는 모델
    2. 일부를 공유하는 모델
    3. 전혀 공유하지 않는 모델
  5. 수행(Execution)
    1. 부모와 자식은 공존하며 수행되는 모델
    2. 자식이 종료될 때 까지 부모가 기다리는 모델
  • 주소공간 (Address space)
    • 자식은 부모의 공간을 복사함(binary and OS data)
    • 자식은 그 공간에 새로운 프로그램을 올림
  • 유닉스의 예
    • fork() 시스템 콜이 새로운 프로세스를 생성
      • 부모를 그대로 복사(OS data except PID + binary)
      • 주소공간 할당
    • fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림

프로세스 종료(Process Termination)

  1. 프로세스가 마지막 명령을 수행한 후 운영체제에 이를 알려줌(exit)
    1. 자식이 부모에게 output data를 보냄(via wait)
    2. 프로세스의 각종 자원들이 운영체제에게 반납됨
  2. 부모 프로세스가 자식의 수행을 종료시킴(abort)
    1. 자식이 할당 자원의 한계치를 넘어섬
    2. 자식에게 할당된 태스크가 더 이상 필요하지 않음
    3. 부모가 종료(exit)하는 경우
      1. 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다.
      2. 단계적인 종료

0개의 댓글