개발 기초/CS 공부

[OS] 01. Introduction to Operating Systems

숩니따 2023. 12. 19. 20:59

 

 

운영체제

운영체제란 무엇인가?

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

  • 협의의 운영체제(커널) → 전공자 입장
    • 운영체제의 핵심 부분으로 메모리에 상주하는 부분
  • 광의의 운영체제
    • 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념

운영 체제의 목적

  1. 하드웨어를 효율적 관리 (컴퓨터 시스템의 자원을 효율적으로 관리)
    1. 프로세서, 기억장치, 입출력 장치 등의 효율적 관리
      1. 사용자 간의 형평성 있는 자원 분배 (형평성)
      1. 주어진 자원으로 최대한 성능을 내기 (효율성)
    1. 사용자 및 운영체제 자신의 보호
    1. 프로세스, 파일, 메시지 (SW 자원) 등 관리
  1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
    1. 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공
    1. 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행

운영 체제의 분류

동시 작업 가능 여부

  • 단일 작업: 한 번에 하나의 작업만 처리 ex. MS-DOS 프롬프트
  • 다중작업: 동시에 두 개 이상의 작업 처리 ex. UNIX, Windows, MS → 현대 운영체제 ★

사용자의 수

  • 단일 사용자 ex. MS-DOS, MS Windows
  • 다중 사용자 ex. UNIX, NT server ★

처리 방식

  • 일괄 처리(batch processing)
    • 작업 요청의 일정량을 모아서 한꺼번에 처리
    • 작업이 완전 종료될 때까지 기다려야 함
    예) 초기 Punch Card 처리 시스템
  • 시분할 ★
    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
    • 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐 ex. UNIX
    • Interactive한 방식 (작업 후 바로 화면에 나오는)
  • 실시간
    • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야하는 실시간 시스템을 위한 OS
    예) 원자로/공장 제어, 미사일 제어, 반도체 장비(파이프라이닝 방식 - 한 공정 하루가 느려지면 반도체 제품 공정 전반적으로 문제가 생김), 로보트 제어

→ 실시간 시스템의 개념 확장

  • Hard realtime system (경성 실시간 시스템) - 데드라인 정확히 지키지 않으면 치명적 결과 나타남
  • Soft realtime system (연성 실시간 시스템) - 데드라인을 조금 어겨도 치명적인 결과가 나타나지 않음

몇 가지 용어

  • Multitasking
  • Multiprogramming
  • Time sharing
  • Multiprocess
  • 구분
    • 위의 용어들을 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻한다.
    • Multiprogramming은 여러 프로그램이 메모리에 올라가 있음을 강조
    • Time Sharing은 CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조
  • (예외) Multiprocessor는 하나의 컴퓨터가 CPU가 여러 개 붙어 있음을 의미

운영 체제의 예

유닉스(UNIX)

  • 대형 컴퓨터(서버)를 위해 만들어진 운영체제
  • 코드의 대부분 C언어로 작성
    → 유닉스를 만들기 위해 C언어 만듦 (어셈블리 언어로 만들기는 힘들어서)
  • 높은 이식성 (하나의 컴퓨터에서 돌아가는 유닉스를 다른 컴퓨터에 컴파일해서 이용하기 쉬움)
  • 최소한의 커널 구조
  • 복잡한 시스템에 맞게 확장 용이
  • 소스 코드 공개 (가져다 쓰기 쉽고 학술적으로 사용하기 좋음)
  • 프로그램 개발에 용이
  • 다양한 버전
    • System V, FreeBSD, SunOS, Solaris
    • Linux
      • 공개SW 정신에 입각해 나온 것
      • 대형 및 개인용 컴퓨터에서도 활용 가
      • 안드로이드 운영 체제 역시 리눅스 기반

DOS(Disk Operating System)

  • MS사에서 1981년 IBM-PC를 위해 개발
  • 단일 사용자용 운영체제, 메모리 관리 능력의 한계 (주 기억 장치 : 640KB)

MS Windows

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

Handheld device를 위한 OS

  • PalmOS, Pocket PC (WinCE), Tiny OS

운영 체제의 구조

CPU ↔ memory ↔ Disk & I/O device

  • CPU 스케줄링 (누구한테 CPU를 할당할지 - 너무 빨라서)
    • 시간 차 완충
    • 최대한 운영체제 활용
  • 메모리 관리 (한정된 메모리를 어떻게 쪼개어 쓸지)
    • CPU에서 원활하게 수용이 되도록 관리
    • 과거 사용 경험을 통해 최근에 사용되지 않은 것 디스크에 쫓아내기)
  • 파일 관리 (디스크에 파일을 어떻게 보관할지 - 헤드의 움직임 최소화하면서 많이 처리)
    • 디스크 헤드가 움직이면서 메모리를 읽음
    • 디스크 스케줄링 필요 (헤드 기준으로 스케줄링) ≒ 엘리베이터 스케줄링
  • 입출력 관리 (각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할지)
    • intruct 기반 (I/O장치가 CPU intruct를 걸어 요청)
  • 프로세스 관리
    • 프로세스의 생성과 삭제
    • 자원 할당 및 반환
    • 프로세스 간 협력
  • 그외
    • 보호 시스템
    • 네트워킹
    • 명령어해석기

⇒ OS 사용자 관점이 아니라 OS 개발자 관점에서 수강하기 (자신이 운영체제라고 생각하기)

컴퓨터 시스템 구조

좌측: host computer 우측: I/O device

동기식 입출력과 비동기식 입출력

동기식 입출력 (synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
  • read 작업이 자연스러움 (읽어온 다음 작업 가능)
  • 구현방법 1 : 하나의 작업이 끝날때까지 기다렸다가 작업이 끝나면 다음 작업을 시작하는 방법이다.
    • I/O가 끝날 때 까지 CPU 및 I/O 모두 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • 구현방법2 : 작업중에 오래걸리는 작업은 뒤로 미뤄두고 먼저 끝나는 작업부터 처리하는 방법이다.
    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
    • I/O 처리를 기다리는 줄에 그 프로그램 줄 세움
    • 다른 프로그램에게 CPU를 줌
    • I/O가 끝나면 intterupt를 걸기

비동기식 입출력 (asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
  • write 작업이 자연스러움 (쓰라고 요청 후 기다리지 않고 진행

⇒ 프로세스가 입출력을 실행하지 않고 기다리면 동기식, 입출력 요청하고 바로 instruction을 실행하면 비동기식

두 경우 모두 I/O의 완료는 인터럽트로 알려줌

  • I/O가 끝나면 interrupt를 걸기

DMA(Direct Memory Access)

DMA

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용 (CPU의 잦은 인터럽트를 막음)
  • CPU의 존재 없이 device controller가 device의 buffer storage의 내용을 메모리 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
  • device 에서 memory에 카피를 해놓고 인터럽트 한번 걸어서 I/O가 끝났다는 것을 알려주기

서로 다른 입출력 명령어

  • 좌측: 일반적 방식
    • 메모리 접근 instruction
    • I/O를 수행하는 special instruction
  • 우측: Memory Mapped I/O에 의해
    • 메모리 주소에 I/O를 가리키는 연장 주소를 붙여서 접근

저장장치 계층 구조

  1. CPU (Primary - Executable)
    → 전원이 나가면 휘발성, CPU에서 직접 접근 및 실행 가능(바이트 단위로 접근 가능한 매체)
    1. Registers
    1. Cache Memory (SRAM으로 구성)
      → 메인메모리와 CPU의 속도 차이를 완충하기 위한 것
    1. Main Memory (DRAM으로 구성)
  1. Secondary
    → 비휘발성
    1. Magnetic Disk (섹터 단위로 접근하는 매체)
    1. Optical Disk
    1. Magnetic Tape
  • 위로 갈수록 보통 속도가 빠른 매체(speed)가 사용
  • 대신에 단위공간당 가격이 비싸기 때문에 위로갈수록 용량이 적음(cost)
  • 더불어 휘발성이 크다(Volatility).
  • Caching: copying information into faster storage system
    빠른 매체로다가 정보를 읽어들여서 쓰는 것 - 재사용 목적
    • 새로 들어오면 캐시 메모리가 적어서 기존에 있던 것을 쫓아내야 하는데 어떤 것을 쫓아내야하는 지가 캐시 메모리의 이슈

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

  1. Disk의 File system (비휘발성의 용도)
  1. Virtual memory
  • 0번부터 시작하는 각자 실행 파일의 독자적인 메모리 주소 공간 생성
    • code: 기계어 코드
    • data: 변수같은 프로그램을 사용하는 자료구조
    • stack: 함수를 호출하거나 리턴할 때 데이터를 쌓았다가 꺼내가는 영역

※ 주소 변환(Address translation) - Virtual 주소에서 Physical 주소로 변경

  1. Physical memory
  • 커널은 항상 상주
  • 사용자 프로그램은 실행시키면 주소 공간이 생겼다 프로그램 종료하면 사라짐
    • 주소 공간 전체를 메모리에 올려두는게 아니고 당장 필요한 부분만 메모리에 올려둠
    • 메모리에서 필요 없으면 Disk의 Swap area에 내려놓음 (메모리 연장 공간 → 꺼지면 사라짐)

커널 주소 공간의 내용 (찾아보기)

사용자 프로그램이 사용하는 함수

함수

  • 사용자 정의함수: 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다.

→ 프로세스 A의 Adress space

  • 커널 함수
  • 운영체제 프로그램 함수
  • 커널함수의 호출 = 시스템 콜

→ Kernel Address space

프로그램 실행

A의 주소공간 Kernel의 주소공간 A의 주소공간 Kernel의 주소공간
user mode kernel mode user mode kernel mode

Program begin System call Return from kernel System call Program ends


Uploaded by

N2T

 

'개발 기초 > CS 공부' 카테고리의 다른 글

[OS] 06. Process Synchronization  (1) 2023.12.22
[OS] 05. CPU Scheduling  (1) 2023.12.22
[OS] 04. Process Management  (0) 2023.12.22
[OS] 03. Process  (1) 2023.12.22
[OS] 02. System Structure & Program Execution  (0) 2023.12.22