[OS] 01. Introduction

SYiee·2022년 10월 12일
0

🦕Operating System

목록 보기
1/14
post-thumbnail

🦖Operating System
이 시리즈는 공룡책을 공부하고 난 내용을 정리한 글 입니다.

  • Operating System Principles (10th edition), Abraham Silberschatz, Peter B. Galvin, and Greg Gagne
  • 오버헤드란?
    프로그램의 실행흐름 도중에 동떨어진 위치의 코드를 실행시켜야 할 때 , 추가적으로 시간,메모리,자원이 사용되는 현상입니다

Ⅰ Computer?

1. 컴퓨터란?

  • 정의: 최소한의 Hardware(CPU + Memory) 위에 Software가 동작하는 기계

2. 컴퓨터의 종류

  • Embedded System : 특정 목적을 위해 설계된 시스템.
    • 범용으로 사용하기는 어렵다.
    • 설계한다는 것 자체가 그 SW가 동작하기에 적합한 HW도 설계한다는 것을 의미한다.
    • 예) 네비게이션, 스마트폰, 게임기, 키오스크, 스마트 워치 …
  • PC : 개인이 원하는 SW를 설치해 다른 목적으로 사용이 가능하다.
    • General Purpose (범용으로 사용됨.)
    • 종류) 데스크탑, 랩탑
  • Server System : 고성능의 다양한 연산이 가능하다
    • 예) 알파고, 기상청 태풍 예측

3. Computer System Components

① Users : 현재 동작 중인 프로그램 (FrontEnd)

② system and application programs : 개발자는 OS가 알려주는 것을 사용해서 프로그램을 제작

③ Operating System : User 프로그램과 그 프로그램이 사용하는 리소스, HW 관리, 자원 분배 관리 등의 일을 함.

④ Computer Haedware: CPU, Memory, I/O

4. Computer System Organization

  • 각 구성요소가 System Bus로 연결된다.
  • Memory – CPU, disk controller, USB controller(mouse, keyboard, printer), Graphics adapter
  • Controller에 따라 하나 이상의 기기가 부착될 수 있다.

5. Modern PC architecture

  • Memory Controller Hub (MCH) : CPU, System Controller(Northbridge: CPU, AGP, DRAM, Southbridge와의 통신을 관장)
  • I/O Controller Hub (ICH) : Peripheral Bus(Southbridge)
  • CPU와 가까워질수록 빠르고 대역폭도 커야 한다.
  • 상대적으루 cPU와 가까운 AGP, DRAM의 작업이 빨리 I/O처리가 이루어져야 하는 것들이다.


Ⅱ Operating System

💡 정의 : 컴퓨터 하드웨어 리소스를 편리(Abstraction)하고 효율적으로 관리를 해주는 소프트웨어이다.

  1. 운영체제란 무엇인가?

    ① Abstraction : 사용자가 밑단의 복잡한 HW 몰라도 되도록 추상화하는 것.

    ② Sharing : HW 리소스는 1개인데 한 번의 하나의 일만 가능하니 OS가 HW자원을 관리한다.
    -> Time multiplexing, Space multiplexing

    ③ Protection : 모든 리소스들을 보호하고 함부로 점유하거나 다른 것을 쓰지 못하도록 한다.

    ④ Fairness: 골고루 동작하도록 한다.

    ⑤ Performance: 최대 성능을 낼 수 있도록 한다.

  2. Definition in textbook

    • Resource allocator, Control program, Kernel

Ⅲ Computer System Operation

Computer HW architecture (Abstract view)

i) ALU (Arithmetic Logic Unit) : 산술연산, 비트연산을 수행함
ii) CU (Control Unit) : RETURN, JUMP 등 전체 프로그램 Path를 컨트롤해줌, Control flow 관리
iii) MMU (Memory Management Unit) : data를 cpu에 저장해두고 쓴다
iv) PC (Program Counter) : 현재 수행되어야 하는 명령어의 주소값을 저장
v) IR (Instruct Register) : PC가 지정하는 명령어를 저장
vi) SP (Stack Pointer) : Stack에
vii) PSW (Process Status Word) : Process의 상태(ready, run, …) 를 저장.
viii) General purpose registers : I/O Device를 컨트롤하는데 사용된다.

CPU Operation

  • Von Neumann architecture : 메모리에다가 Data, Code를 구분 없이 함께 저장해서 사용하는 것
  • Harvard architecture : CPU의 양쪽에 Data 메모리와 Code 메모리를 따로 두고 분리해서 사용하는 것.
    ➔ Von Neumann architecture에 비해 빠르지만 실행시키는 프로그램의 코드와 Data를 분리시켜 Load하는 작업이 복잡하여 HW 복잡도가 매우 커 거의 사용하지 않는다.
  • Instructions
    ➔ Arithmeti instructions, Logical instructions, Control flow instructions, Data instructions

CPU

Bootstrapping in Linux

(전기가 공급 되면…)

  1. CPU가 스스로를 초기화 시키고 스스로가 잘 동작하는지(register) 체크한다.

  2. 0xfffffff0 번지로 점프한다. 이곳에는 BIOS/UEFI가 있다. 이들은 memory나 i/o device가 잘 동작하는지 확인한다. 이들은 전원 공급이 끊겨도 데이터가 남아 있을 수 있는 ROM으로 비휘발성이다.

    ◼ UEFI ( Unified Extensible Firmware Interface ) : BIOS가 advanced된 형태.

    기존 BIOS는 플랫폼 종속적이라 범용적으로 사용이 불가했는데 UEFI는 플랫폼 independent하다. GUI로 된 CMOS이다.

    ◼ BIOS ( Basic Input/Output System) : 컴퓨터가 동작하기 위해서 필수적으로 필요한 메모리, i/o 디바이스 등 cpu를 제외한 나머지 구성요소들이 잘 연결이 되었는지 정상적으로 동작하는지 테스트한다 (POST Power On Self Test)

  3. Boot Loader(LILO/GRUB)를 실행시킨다.
    : BIOS에서 모든 준비가 끝이 나면 윈도우를 켜야 하는데 윈도우가 어디에 있는지는 Boot Loader가 알고 있다. Boot Loader 안에는 디스크에 존재하는 운영체제가 디스크 어디에서부터 시작되어 저장되어 있는지, 여러 개의 운영체제가 있으면 각각 어디부터 어디에 저장되어 있는지 이것을 메모리로 로드해오는 작업 코드 까지도 들어 있다.
    ◼ MBR (Master Boot Record) in BIOS
    ◼ ESP (Efi System Partition ) in UEFI

    LILO : 운영체제가 업데이트가 되는 경우에 새로 부트로더를 갱신을 해야하지만 GRUB는 파일명이랑 커널이 위치하는 파티션만 알고 있으면 알아서 읽어들여야 하는 시작부분을 알 수 있다. 확작성이 더 좋다. 
  4. Boot Loader가 할 일을 다하면 CPU를 사용할 수 있는 권한을 운영체제에게 넘겨준다. (LILO/GRUP가 압축되어있는 커널을 메모리로 풀어서 올리면 실행될 수 있는 커널의 이미지가 메모리에 로드가 되고 나면 CPU를 사용할 수 있는 권한을 운영체제에게 넘겨준다.)

+) OS가 부팅되고 처음 실행되는 프로그램은 Idle Program이다. Idle 가 몇 %인지는 cpu 점유율을 나타내는 척도이다.

Instruction Set Architecture (ISA)

  • CISC vs RISC

  • Intel(x86 CISC), SPARC, MIPS, PowerPC, ARM(RISC), Alpha, …

  • 💁🏻‍♀️ 명령어 집합인 Instruction Set에 따라 다른데 Instruction Set이 복잡하고 많으면 CISC 상대적으로 적으면 RISC 이다.
    과거 컴퓨터의 용도는 계산기였다. 그런데 복잡한 연산이 많이 CPU연산으로 많이 사용되다보니 느려졌다. 원래는 여러개 명령어로 하나의 복잡한 연산을 했는데 매번 할 때 마다 다 하려니 느려서 전체를 하나의 명령으로 만드니 성능이 좋아졌다. 컴퓨터 사용하는 사람이 이것 저것 요청을해서 점점 요구에 의해 추가되는 명령들이 많아졌다. 그러다보니 설계에 있어 복잡도가 향상되고 SISC 형태로 발전되다 한계에 도달하게 되니 그냥 원래의 RISC 형태로 발전이 진행되는데 성능을 높이기 위해서 Pipelining 을 사용하게 된다.

Pipelining

→ Fetch, Decode, Execute, Write Back, etc

CPU가 동작하는 순서에서 착안을 하게 되었는데

  • Fetch : PC에 있는 주소값을 가지고 오는 동작을 수행

  • Decode : IR에 저장된 명령을 CPU가 실제 시행할 수 있는 형태의 전기 코드로 바꾸어 주는 작업

  • Excute : 실행

  • Write Back : 실행을 다 하고 난 뒤 Output을 메모리에 쓰는 것

→ 이 네가지가 독립적으로 수행이 가능하다
→ 최대 4배만큼의 성능 향상이 이루어질 수 있지만 항상 그런 것은 아니다

  1. Instruction을 실제로 시행시키는 시간차가 있기 때문에
  2. 코드의 종속성이 있는 경우, Parrell 하게 동작이 불가

→ RISC의 단점 : cache가 많이 필요하다.

Instruction-Level Parallelism (ILP)

→ Superscalar vs. VLIW

  • Superscalar : 인텔에서 만듬, CPU에서 지금 실행해야하는 것 다음에 실행해야하는 것을 판단한다. 고쳐쓰기가 안 된다.

  • VLIW : 컴파일러에서 판단

→ Simultaneous multithreading

→ Multi-core

Multi-Core architecture

CPU Die 안에 레지스터와 cache가 따로 있고

메인 메모리는 따로 있고 코어들이 다이 하나에 들어가 있는 것.

Symmetric multiprocessing architercture

한 시스템 안에 여러 cpu를 두고 메모리를 공유하는 형태

→ workstation

NUMA

한 시스템 안에서 여러 cpu가 존재하고, CPU마다 독립적인 메모리를 가지고 있다. 연산을 나누어 수행

ex) 기상청 컴퓨터

Clustered System architecture

독립적인 컴퓨터들이 네트워크로 연결이 되어 있다.

Cf) Parallel(분산적으로 해서 동시에 동작할 수 있도록 하는 것) vs Distributed System(초창기 네이버)

  • 분산 : 컴퓨터 시스템이 독립적인 것들이 네트워크로 연결
  • 병렬 : 한 시스템안에 cpu가 여러개 있는 것

📌 I/O operation

I/O가 끝나면 Controller가 CPU에게 이 사실을 알려줄 수 있는 방법

  1. Polilng : CPU가 주기적으로 I/O가 끝났는지 확인하는 것
    • interval이 작을 수록 반응속도는 빠르지만 cpu가 하던 일을 멈추고 확인을 해야하기 때문에 오버헤드가 커진다.
  2. Interrupt : 질문을 무시하고 계속 하던 일을 하다가 다 끝나면 cpu에게 보고 하는 것
    • cpu는 interrupt가 오면 현재 하고 있는 동작을 정지한다
  3. DMA : 메모리에서 cpu를 거치지 않고 디스크에 무언가를 쓰거나 디스크에서 cpu를 거치지 않고 메모리에 data를 로드한다. Disk와 같이 대용량의 데이터를 전송할 때 사용한다.
    • 영화처럼 용량이 큰 파일을 I/O처리 하려면 CPU가 계속해서 인터럽트를 받아야 하니 성능이 떨어질 수 있다. 이런 경우에 disk controller가 dma controller에게 요청을 하면 DMA controller가 PCI Bus를 이용하지 않고 CPU에서 CPU memory bus를 사용할 수 있는 권한을 얻어 직접적으로 메모리에 접근해 데이터를 transfer한다. 모든 작업이 끝나면 DMA가 CPU에게 인터럽트를 걸어 종료를 알린다.

  • Direct I/O vs. Memory-mapped I/O
    • Direct I/O : 직접적으로 레지스터에 명령어를 넣는 것

    • Memory-mapped I/O : 레지스터 대신에 메모리 특정 번지에 mapping을 시켜 그 메모리에 명령을 쓰는 것이 I/O 컨트롤러에게 명령을 내리는 것과 같이 동작. 메모리는 레지스터보다 싸고 양이 많다. cpu가 메모리에 write하는 명령을 시행할 때 I/O controller한테 명령을 내리는 것과 같이 작동을 한다.

      → Communicates with registers in I/O controller

      실제로 cpu가 직접적으로 뭔가를 하지 않고 I/O controller한테 write하면 독립적으로 수행한다

      → Typically, IR (Instruction Register) & DR (Data Register)

      명령을 잘 수행하려면 IR이 있어야 한다.

  • Interrupt-driven I/O cycle

I/O mode from the perspective of application processes

  • Synchronous / Blocking
    특정 프로세스가 I/O를 요청해서 디바이스 드라이버를 거쳐서 실제 하드웨어에게 명령이 가는데 이게 실행이 되서 끝날 때 까지 시간동안 기다려야 하는 경우. I/O가 완료된 다음에 다음 작업을 해야하는 경우

  • Asynchronous / Non-Blocking

    프로세스가 동작하는데 종속성이 없는 경우

Intererrupt의 종류

  1. HW Interrupt
    : HW Device 에 의해
    → Timer Interrupt, keyboard Interrupt
  2. Trap ( Systam call )
    : Application Process로 인해 발생할 수 있는 인터럽트
    → Systam call
    → ex) cin, cout
  3. Fault
    : CPU가 자기 스스로에게 인터럽트를 거는 것.
    → ex) Divide-by-zero, protection fault(남의 메모리의 침투)

Storage hierarchy

: 저장 시스템은 속도, 가격, 휘발성 등의 기준에 따라 계층적 구조를 가진다.
[비싸고 빠르다] registers > cache > main memory > solid-state disk >hard disk > optical disk > magnetic tapes [ 느리고 싸다 ]

  1. ROM(Read Only Memory) 한 번만 쓸 수 있고 전력 공급이 끊겨도 지워지지 않는다.(비휘발성)

  2. RAM(Random Access memory) 반복적으로 쓰고 지울 수 있으면 전기 공급이 끊기면 지워진다.(휘발성), ROM에 비해 상대적으로 빠르다
    a. SRAM(Static RAM) : 전기를 튀겨주는 소자가 없음, 빠르고 비싸다.
    → 전원이 공급되지 않을 때도 1, 0을 써 둔것이 유지가 된다.
    b. DRAM(Dynamic RAM) : 소자가 있음, 느리고 싸다.
    → 전원 공급이 안되면 시간이 지날수록 1, 0을 기록해둔 것이 뭉개지기 때문에 다시 refresh를 해주어야 한다. 이때 refresh를 하는 동안 다른 작업을 할 수 없기 때문에 비교적 느리다.

  • Caching 캐싱 : 정보를 보다 빠른 저장 장치에 복사해 두는 정책
  1. Write-through : 변경사항을 바로 다시 써 일관성은 좋지만 성능이 떨어진다.

  2. Write-back : 변경사항을 바로 다시 쓰지 않고 CPU가 수행할 일이 없을 때 update한다. 일관성은 떨어지지만 성능은 좋다.

    → CPU가 할 일이 없을 때 update

Physical hard disk structure (HDD)

HDD가 느린 이유는 arm을 넣었다 빼는 시간이 가장 오래 걸린다. (arm seek time)

→ 같은 실린더에 분산해 저장함으로서 해결한다,

Compact Flash card internals (SSD)

블록(데이터를 저장할 수 있는 단위) 하나에 수정사항이 생겼을 때는 블록 안에 데이터를 갱신하는 것이 아니라 데이터가 저장되어 있는 유닛을 disable 시키고 다른 곳에 새로 쓴다. 재활용하기 위해서는 전체를 클리어를 해야 하는데 블록을 클리어하는 횟수가 제한되어 있다.

NAND → Random Access 가능 + 비휘발성

Dual-Mode

운영체제는 사용자 프로그램이 함부로 시스템에 접근하지 못하도록 유저모드와 커널모드를 나눈다.

이 모드는 누가 CPU를 점유하고 있느냐에 따라 구분한다. os가 cpu를 점유하고 있으면 이를 kernel 모드라고 한다. 유저 모드에서 커널 모드의 기능을 호출하고 싶다면 시스템 콜(System call)이라는 인터페이스를 통해야 한다.
[ 이 내용은 뒷 단원에서 자세히 다룬다. ]

Hardware Protection

① CPU protection

  • 특정 프로그램이 자원을 독점하거나 무한루프에 빠지는 현상을 방지

② Memory protection

  • Protection fault, 다른 영역에 접근하려고 하면 인터럽트를 건다.

③ I/O protection

  • Dual mode operation : 사용자 모드와 커널 모드를 분리하여 운영한다.

💻 OS takes controls of the system

  • Bootstrapping
  • System calls (Trap)
  • Interrupts
  • 아무것도 하지 않을 때도 OS가 컨트롤 하기도 한다. → Idle()

IV. Computer History

  1. 1st Generation (1945-55)
    • Vacuum Tubes and Plugboards
    • 애니악
    • OS, Programming Language, Assembly Language가 모두 없었다.
  2. 2nd Generation (1955-65)
    • Transistor의 개발로 집적도가 높아짐
    • Batch System : 흐름에 따라 순차적으로 일을 수행한다. 병목현상으로 인해 performance가 떨어진다. → 운영체제라고 부르기는 어렵고 Resident Monitor라고 부르기도 한다. → 실제 CPU가 Process 연산하는 시간은 아주 적은데 I/O처리를 하는데 오랜 시간이 걸린다.(병목현상)
  3. 3rd Generation (1965-80)
    • Integrated Circuits(ICs)의 개발 → 집적도가 높아짐.
    • Architectual라는 개념이 생김. 컴퓨터다운 컴퓨터가 생기기 시작
    • Multiprogramming systems : 인터럽트를 이용해 여러 프로그램을 동작할 수 있도록
    • Time-sharing system : 특정 시간 이상으로는 프로세스가 동작하지 않도록 하는 장치를 타임 인터럽트 개념을 활용해서 만들어 두었다. → fairness 보장 → response time을 낮출 수 있다
  4. 4th Generation (1980 -)
    • Personal computer 개념의 등장 ( microprocessor 더 작게 만들 수 있어짐)
    • Modern OS ( GUI-Apple1, Multimedia, Internet, Web, Network)

V. Computing Environments

  1. Transitional computing

    • Mainframe system : Batch system, Multiprogramming system, time-sharing system
  2. Mobile computing

    • Hand- held system : limited memory, slow processors, small display screens
  3. Real-time embedded computing

    • Real-time systems : dead line을 지켜야 하는 system (항공기, 자율 주행 등)
      • Hard-real time : 항공기, 자율 주행
      • Soft-real time : 동영상 스트리밍, 네비게이션 도착 예상 시간
    • embedded systems : 특정 목적으로 만들어짐
  4. Client-server computing

    • Large-scale server in data center
    • clustered server : 병렬 시스템을 맥마운트로 연결해서
  5. Peer-to-Peer computing

    • ex) 닌텐도 별도의 인터멧이 필요한 것이 아니라 가까이 가면 연결
    • Ad-hoc : 기반 없이 서로 내트워크를 만들어 구성
  6. cloud computing

    : HW 자원의 가상화

💻 [4사산업 혁명]
컴퓨터가 싸고 작아졌다 ->여기저기 센서들을 달아볼까? → IoT 사물 인터넷, raw data들이 많아져서 이 data를 의미 있게 만들기 위해 data를 처리하는 기술을 연구하기 시작했다. -> Big Data, data가 많아지니 다시 computing power가 필요하였다. 그러나 실제로 컴퓨터를 사용할 때는 대체로 10%미만의 power을 사용한다. 이렇게 노는 자원들을 모아서 하나의 시스템으로 묶어 사용할 수 있게 하였다 -> Cloud -> 그래도 남는 자원… -> AI

  • IaaS (Infrastructure as a Service) : 컴퓨터 HW 자원을 지원받는 것.
  • PaaS(Platform as a Service) : HW에 플랫폼까지 처리해 주는 것
  • SaaS (Software as a Service) : HW에 플랫폼에 서비스까지 올려주는 것
  1. Virtualization
    윈도우 위에서 리눅스, 우분투를 올릴 수 있당 → 하드웨어 가상화
  • Virtual machine : 하드웨어 위에 이 하드웨어를 가상화시킬 수 있는 가상 머신 매니저가 올라가고 매니저를 통해서 여러 개의 플랫폼이 동시에 올라갈 수 있다.
  • JVM : 오브젝트 파일을 플랫폼에 맞게 바이너리를 생성해서 실행시켜준다. (느리다는 단점)
  1. Distributed computing

VI OS History

  • UNIX (Bell Lab) 계보를 따르는….
    → BSD
    → Next Step
    → Xenix
    → Sun OS → Sun Microsoft → Oracle

  • POSIX - Unix 계보를 따르는 애들이 지키는 표준

  • Embedded System → Vxworks ( 항공기나 우주산업에 사용되는 hard real time os)

profile
게임 개발자

0개의 댓글