๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŒฑ CS/์šด์˜์ฒด์ œ(OS)

[์šด์˜์ฒด์ œ ๊ณต๋ฃก์ฑ…] Ch 2. Operating-System Structures

๐Ÿ“ ๊ณต๋ฃก์ฑ… ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™๊ต์—์„œ ์ˆ˜์—…ํ–ˆ๋˜ ์šด์˜์ฒด์ œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

0๏ธโƒฃ Introduction

What Operating Systems Do?

  • ์šด์˜์ฒด์ œ = ์ปดํ“จํ„ฐ์˜ ์‚ฌ์šฉ์ž์™€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ
  • ์ปค๋„ = ๋ณดํ†ต ๋ฆฌ๋ˆ…์Šค์˜ OS๋ฅผ ๋ถ€๋ฅด๋Š” ๊ฒƒ. ์•Œ๋งน์ด. OS์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„

How Operating Systems Interact?

User ↔ Program ↔ OS ↔ Hardware

  • OS์™€ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์— interaction์ด ์กด์žฌํ•˜๊ณ , OS์™€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด interaction์ด ์กด์žฌ
  • OS์™€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด interaction์— ๋Œ€ํ•œ interface = Interrupt


Computer System Organization

  • system bus = ํ†ต์‹ ํ•˜๋Š” ‘ํ†ต๋กœ’
  • ์™ธ๋ถ€ ๋””๋ฐ”์ด์Šค → device controller๋ฅผ ํ†ตํ•ด์„œ ์—ฐ๊ฒฐ.
    • device controller๋Š” device type์— ๋”ฐ๋ผ์„œ ์กด์žฌ.
    • device controller๋Š” ๋งˆ๋”๋ณด๋“œ์— ๋‚ด์žฅ๋˜์–ด์žˆ๋‹ค. (system bus๋„ ๋งˆ๋”๋ณด๋“œ ์œ„์— ๋‚ด์žฅ)
    • ์ „์ž ํšŒ๋กœ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š” ‘ํ•˜๋“œ์›จ์–ด’์— ํ•ด๋‹น
  • OS๋Š” device controller๊ณผ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด์„œ device driver๋ผ๋Š” SW ๋‹จ์˜ ๊ฒƒ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค

device controller, system bus๋Š” hardware ๋‹จ์ด๊ณ , device driver๋Š” software๋‹จ!!


1๏ธโƒฃ Interrupts

What Interrupt is

๋‹น์‹ ์ด ์ด ๊ทธ๋ฆผ์„ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์•„๋ž˜ ๊ธ€์„ ์ฝ์ง€ ์•Š์•„๋„ ์ข‹๋‹ค

 

โ—๏ธ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ฃผ์ฒด = device controller

ex) ํ‚ค๋ณด๋“œ ๋ˆ„๋ฆ„(์ž…๋ ฅ)

→ ํ‚ค๋ณด๋“œ device controller๊ฐ€ system bus๋ฅผ ํ†ตํ•ด CPU์— ์ธํ„ฐ๋ŸฝํŠธ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค

→ CPU๊ฐ€ detectionํ•˜๊ณ  ์›๋ž˜ ์ž‘์—… ์ค‘๋‹จํ•˜๊ณ  interrupt handling ์‹œ์ž‘

→ interrupt handling์ด ๋๋‚˜๋ฉด ์›๋ž˜ ์ž‘์—… ๋‹ค์‹œ ์žฌ๊ฐœ

 

โ—๏ธ ์ธํ„ฐ๋ŸฝํŠธ processing์€ OS ์•ˆ์—์„œ ์ผ์–ด๋‚œ๋‹ค.

  • ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Interrupt Vector๋ผ๋Š” ์ธํ„ฐ๋ŸฝํŠธ Type์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ์ฝ๊ณ , ๊ทธ ํƒ€์ž…(ex: ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, … )์„ ๋จผ์ € ํŒŒ์•…ํ•œ๋‹ค.
    • interrupt ๋ฒกํ„ฐ๊ฐ€ ํƒ€์ž…์— ๋งž๊ฒŒ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
    • ์ด ํ•จ์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ€์žˆ๋Š”๋ฐ, ๋ถ€ํŒ…์„ ํ•˜๊ฒŒ ๋˜๋ฉด OS๊ฐ€ initialize๋ฅผ ํ•ด์ค˜์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ •ํ•ด์ง„ ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐ€์žˆ๊ฒŒ ๋˜๊ณ , CPU๋Š” ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด ๋ถ€๋ถ„์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ํƒ€์ž…์— ๋งž๋Š” Interrupt handler๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    • interrupt handler = interrupt service routine = ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜

โ—๏ธ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋™์•ˆ CPU๋Š” ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค!

ex) ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์‹ถ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋””๋ฐ”์ด์Šค(๋””์Šคํฌ)์— ์š”์ฒญํ•˜๋ฉด ๊ฑฐ๊ธฐ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋™์•ˆ์€ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒŒ ํšจ์œจ์ ์ด๋‹ค.

→ I/O ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๋””๋ฐ”์ด์Šค(๋””์Šคํฌ)๊ฐ€ ์ž‘์—…์„ ๋๋‚ด๋ฉด ๋””์Šคํฌ๊ฐ€ Interrupt๋ฅผ ์ค˜์„œ ์ž‘์—…์ด ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค!

 

โ—๏ธ ์ธํ„ฐ๋ŸฝํŠธ๋ผ๋Š” ๊ฒƒ์€ ์ˆ˜์‹œ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋งํ•˜๋Š” ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง์•„์•ผ ํ•œ๋‹ค.!

  • ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ฌ ์‹œ๊ฐ„์ด ์—†๋‹ค.

Implementation

โ—๏ธ ํ•˜๋“œ์›จ์–ด

  • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ”๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, PIC๋ผ๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋˜ ์กด์žฌ(Programmable Interrupt Controller)
  • ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์˜ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‹ค ํ•ฉ์ณ์ฃผ๋Š” ์—ญํ• 
    • ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋™์‹œ์— ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋ถ„ ๋ฐ ์กฐ์œจํ•ด์„œ CPU์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”
    • ์‹œ๊ทธ๋„์ด ๋“ค์–ด์˜ค๋ฉด CPU๊ฐ€ ์ •ํ•ด์ง„ ๋™์ž‘(์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๋ฅผ ์ฝ์–ด์„œ …) ํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋žจ ๋˜์–ด์žˆ๋‹ค
    • → CPU์—์„œ ์ „๊ธฐ์  signal์„ ๋ฐ›๋Š” ํฌํŠธ(ํ•€)= Interrupt Request Line
  • ๋งˆ๋”๋ณด๋“œ์˜ southbridge chip์— ์œ„์น˜ํ•œ๋‹ค
๋”๋ณด๊ธฐ

๐Ÿ“ ๋งˆ๋”๋ณด๋“œ์˜ ๊ตฌ์„ฑ

- North Bridge : GPU(๊ทธ๋ž˜ํ”ฝ์Šค) ํ†ต์‹ , RAM(๋ฉ”๋ชจ๋ฆฌ)

- South Bridge : ๋‚˜๋จธ์ง€ ๋””๋ฐ”์ด์Šค (USB, I/O ...)

- CPU

- GPU

 

๐Ÿ“PIC → external Device ์—ฐ๊ฒฐ → South Bridge

 

โ—๏ธ ์†Œํ”„ํŠธ์›จ์–ด

Types

OS์—์„œ ๊ตฌ๋ถ„ํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ํƒ€์ž…์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

(1) ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ

  • ํ•˜๋“œ์›จ์–ด ๋””๋ฐ”์ด์Šค์—์„œ ์‹ค์ œ ๋ฐœ์ƒํ•œ ์ „๊ธฐ์  ์‹ ํ˜ธ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ

(2) ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ

  • ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ์™€ ํ—ท๊ฐˆ๋ ค์„œ, exception์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค
  • ์™ธ๋ถ€ ๋””๋ฐ”์ด์Šค์—์„œ ์˜ค๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ”„๋กœ์„ธ์Šค ์ž์ฒด์—์„œ ๋“ค์–ด์˜ค๋Š”(ํ”„๋กœ์„ธ์Šค ์ž์ฒด๊ฐ€ requestํ•˜๋Š”) ์ธํ„ฐ๋ŸฝํŠธ
    • ex) ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ → ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ “Segmentation Fault” ๋ฐœ์ƒ

2๏ธโƒฃ System Calls

What System Call is

  • System call = ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์—์„œ OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค(API)

 

  • ์˜ˆ์‹œ) ํŒŒ์ผ์„ ์—ด๊ณ , ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ, ๋‹ค๋ฅธ ํŒŒ์ผ์— ์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž
    • ํŒŒ์ผ์„ OS๊ฐ€ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ๋‹ค ์‹œ์Šคํ…œ์ฝœ์„ ํ†ตํ•ด์„œ “๋‚ด๊ฐ€ ํŒŒ์ผ์„ ์—ด๊ฒ ๋‹ค”๊ณ  ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค
      • ์œ ์ € ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์‹œ์Šคํ…œ์ฝœ์„ ํ˜ธ์ถœ
      • ์œ ์ € ํ”„๋กœ์„ธ์Šค์—์„œ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์ปจํŠธ๋กค์ด ์ปค๋„๋กœ ๋„˜์–ด๊ฐ„๋‹ค (์ปค๋„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜)
      • ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ ๊ฐ™์€ ๋™์ž‘ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์ปค๋„ ๋‹จ์œ„(level)์—์„œ ํ•ด์ค€๋‹ค. (์œ ์ € ํ”„๋กœ๊ทธ๋žจ์€ ๋‚ด๊ฐ€ ํŒŒ์ผ์„ ์—ด๊ฒ ๋‹ค๊ณ  ์š”์ฒญ๋งŒ ํ•˜๊ณ  ์‹ค์ œ ์ฒ˜๋ฆฌ๋Š” ์ปค๋„์—์„œ)
      • ํŒŒ์ผ ์—ฌ๋Š” ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ์œ ์ € ๋ชจ๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ ์‹œ์Šคํ…œ์ฝœ ๊ฐ’์„ ์ด์šฉํ•ด์„œ ๊ณ„์† ์ฒ˜๋ฆฌ๋ฅผ ์ด์–ด๋‚˜๊ฐ„๋‹ค.

  • ์‹ค์ œ ์‚ฌ์šฉ → C/C++ Standard Library ํ†ตํ•ด์„œ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ—ค๋” ํŒŒ์ผ(stdio.h, unistd.h)์˜ ํ•จ์ˆ˜(printf(), write()) ๊ตฌํ˜„์„ ๋œฏ์–ด๋ณด๋ฉด ์‹œ์Šคํ…œ์ฝœ ๋ฐœ์ƒ์ด ํฌํ•จ๋˜์–ด์žˆ๋‹ค. BUT ์šฐ๋ฆฌ๋Š” ์‹œ์Šคํ…œ์ฝœ์„ ๋ถ€๋ฅด๋Š”์ง€ ์•Œ ํ•„์š”์—†๊ณ , ๋™์ž‘๋งŒ ์•Œ๋ฉด ๋œ๋‹ค.
    • → ์‹œ์Šคํ…œ์ฝœ์„ ์ง์ ‘ ๋ถ€๋ฅผ ์ผ์€ ์—†๊ณ  API๋ฅผ ํ†ตํ•ด์„œ ์‹œ์Šคํ…œ์ฝœ์„ ํ˜ธ์ถœํ•œ๋‹ค

 


Implementation

  • ์‹œ์Šคํ…œ์ฝœ๋„ ์ธํ„ฐ๋ŸฝํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ type๋งˆ๋‹ค ‘๋ฒˆํ˜ธ’๊ฐ€ ๋ถ€์—ฌ๋˜์–ด์žˆ๋‹ค.
    • write(), read(), … ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์‹œ์Šคํ…œ์ฝœ ์กด์žฌ
    • ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ์ฝœ function์ด OS์— ์ €์žฅ๋˜์–ด์žˆ๋‹ค.
    • ์‹œ์Šคํ…œ์ฝœ์ด ์š”์ฒญ๋˜์—ˆ์„ ๋•Œ ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค.
      • → system call interface ํ†ตํ•ด์„œ ์‹œ์Šคํ…œ์ฝœ์„ ๋ถ€๋ฅด๊ณ , ๋ฆฌํ„ด๊ฐ’๋„ ๋„˜๊ฒจ์ค€๋‹ค
  • ์‹ค์ œ ๋ฆฌ๋ˆ…์Šค ์˜คํ”ˆ์†Œ์Šค ์‹œ์Šคํ…œ์ฝœ ํ…Œ์ด๋ธ”
    • ์‹œ์Šคํ…œ์ฝœ number | type | ์ด๋ฆ„ | ์‹ค์ œ๋กœ ๋ถˆ๋ฆฌ๋Š” ํ•จ์ˆ˜
      • read system call request → TBL → sys_read() ํ˜ธ์ถœํ•ด์„œ OS๊ฐ€ handling

 

  • ex) ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด์„œ fopen() ๊ฐ™์€ ํ•จ์ˆ˜ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ

  1. ์œ ์ € ์ฝ”๋“œ์˜ ํ•จ์ˆ˜ ๋‚ด์—์„œ open ์‹œ์Šคํ…œ์ฝœ์„ ๋ณด๋‚ธ๋‹ค
  2. ์ด๋ฅผ ์ปค๋„์ด ๋ฐ›์€ ๋‹ค์Œ์— open() ์ด๋ผ๋Š” ์‹œ์Šคํ…œ์ฝœ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์•ผํ• ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ, ์‹œ์Šคํ…œ์ฝœ ํ…Œ์ด๋ธ”์„ ์‚ดํŽด์„œ ๋งž๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค
  3. sys_open()์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์„œ ํ•ธ๋“ค๋ง์„ ํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ๊ฐ’์„ ์œ ์ €์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค

Parameter Passing

  • read()๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์‹œ์Šคํ…œ์ฝœ์—๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • int fd : ์—ด๊ณ  ์‹ถ์€ ํŒŒ์ผ์˜ file descriptor
    • void *buf : ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ผ ๋•Œ ํ•„์š”ํ•œ, ํ• ๋‹น๋œ ๋ฒ„ํผ
    • size_t count : ์–ผ๋งˆ๋งŒํผ ํŒŒ์ผ์—์„œ ์ฝ์–ด๋“ค์ผ ๊ฒƒ์ธ์ง€
    → ์ด๊ฑธ ์–ด๋–ป๊ฒŒ OS์—๊ฒŒ ์ „๋‹ฌํ•ด์ค„๊นŒ?

โ—๏ธ Simplest

  • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•! =  ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์šฉ๋„์ธ CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ €์žฅํ•ด๋‘”๋‹ค
  • ์ฒซ ๋ฒˆ์งธ eax๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด๋†“๋Š”๋‹ค๊ณ  OS์—์„œ ์•ฝ์†์„ ํ•ด๋‘๋ฉด, ์ •ํ•ด์ง„ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ์ฝ์–ด์™€์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๋‹จ์  → CPU๋งˆ๋‹ค ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฌดํ•œ์ •์œผ๋กœ ๋„ฃ์„ ์ˆœ ์—†๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ๋งŒ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ œ์ผ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹!!! ๋ฌดํ•œ์ •์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ๋‘ ๋ฐฉ์‹ ์‚ฌ์šฉ

โ—๏ธ Block

  • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ์„ ํ•˜๊ณ , ์‹œ์ž‘ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.
    • ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ฝ์–ด๋ผ~ ( e.g - read()์—์„œ ์ฝ์„ ๋ฒ„ํผ์˜ ํฌ์ธํ„ฐ ๊ฐ’์„ ์ฃผ๊ฒŒ ๋œ๋‹ค)

โ—๏ธStack

  • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— push๋ฅผ ํ•ด๋†“๊ณ  ๊บผ๋‚ด ์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹

3๏ธโƒฃ Operating System Structure

โ• Simple(MS-DOS) ↔ Complex(UNIX)
Layered(abstraction) ↔ Microkernel(Mach)

 

Monolithic Structure - Original UNIX

  • ์ปค๋„์ด ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๋ผ์žˆ๋‹ค. ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ = ๋ชจ๋“  ์ปค๋„์˜ functionality๊ฐ€ ํ•˜๋‚˜์˜ ํฐ binary ํŒŒ์ผ๋กœ ๋ฌถ์—ฌ ์žˆ๋‹ค.
    • file / storage management ๋“ฑ์ด ๋‹ค ํ•˜๋‚˜์˜ ์ปค๋„๋กœ ๋ฌถ์—ฌ์žˆ๊ธฐ ๋•Œ๋ฌธ์— tightly coupled(๊ต‰์žฅํžˆ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค)
    • (์žฅ์ ) ํ•œ ๋ฉ์ด๋กœ ๋ผ์žˆ์–ด์„œ ์‹œ์Šคํ…œ์ฝœ์„ ๋ถˆ๋ €์„ ๋•Œ ๋ชจ๋“  ์„œ๋น„์Šค์— ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๋‹ค (์ปค๋„๊ณผ์˜ ์†Œํ†ต์ด ์‰ฝ๋‹ค)
    • (๋‹จ์ ) ์–ด๋–ค ํ•œ ๋ถ€๋ถ„ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด, ๋‹ค๋ฅธ ๋ถ€๋ถ„์—๋„ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ


Layered Approach

monolithic(๋ชจ๋‘๊ฐ€ ์„œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ) ↔ Layered(์œ„์—์„œ ์•„๋ž˜๋กœ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)

  • OS์—๋„ ๋‹จ๊ณ„(layer)๊ฐ€ ์žˆ๋‹ค.
    • ๋‚ด๋ ค๊ฐˆ์ˆ˜๋ก ๋‚ฎ์•„์ง„๋‹ค. → 0๋ฒˆ์€ ํ•˜๋“œ์›จ์–ด. ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ์€ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค
    • ๊ถŒํ•œ์— ๋”ฐ๋ผ์„œ ๋ ˆ์ด์–ด๋ฅผ ๋‚˜๋ˆ ๋†“๊ณ , ์œ„→์•„๋ž˜๋กœ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์žฅ์ 
      1. ์ง๊ด€์  ๊ตฌ์กฐ → ๋‚˜๋ˆ ๋†“๊ณ  ๊ฐ ๋ ˆ์ด์–ด์— ๋งž๊ฒŒ ๋ชจ๋“ˆ ๊ตฌํ˜„ → ๋””์ž์ธ ์‰ฝ๋‹ค                                                                                  (์ปด๋„ค์˜ TCP ๋ ˆ์ด์–ด ๊ฐ™์ด ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๊ตฌ๋ถ„์ด ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋””์ž์ธ์ด ์‰ฝ๋‹ค)
      2. ๋””๋ฒ„๊น…, verification ์‰ฝ๋‹ค → ๋ ˆ์ด์–ด ๋‹จ์œ„๋กœ ํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ                                                                                        (monolithic์€ ๋‹ค tightly coupled๋ผ์„œ ์ž˜๋ชปํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฐ๋„ ์˜ํ–ฅ ์ค„ ์ˆ˜ ์žˆ์Œ)
    • ๋‹จ์  : ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค
      • layer1์„ ์ ‘๊ทผํ•˜๋ ค๋ฉด ์ƒ์œ„ layer๋ฅผ ๋ชจ๋‘ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค → ์‹œ์Šคํ…œ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

Microkernels

  • ์ปค๋„์ด ํ•˜๋Š” ๊ฒƒ์„ ์œ ์ € ์ŠคํŽ˜์ด์Šค๋กœ ๋Œ์–ด์˜ฌ๋ ธ๋‹ค.

  • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฐฉ์‹ → Message Passing
    • file system์ด device driver๋ž‘ ์†Œํ†ตํ•ด์•ผํ•  ์ผ์ด ์žˆ์„ ๋•Œ ๋ฉ”์„ธ์ง€ ํŒจ์‹ฑ ๋ฐฉ์‹์œผ๋กœ ์†Œํ†ต
    • ์ปค๋„์ด ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ.
  • ์žฅ์  : ์ปค๋„์ด ๋‹จ์ˆœํ•ด์ง„๋‹ค. extensionํ•˜๊ธฐ ์‰ฝ๋‹ค. reliableํ•˜๋‹ค.                                                                                                       → ์ปค๋„ ๋ชจ๋“œ์—์„œ ์• ์ดˆ์— ๋Œ์•„๊ฐ€๋Š”๊ฒŒ ์ ์–ด์„œ, ๋ฐ์ดํ„ฐ ์œ ์ถœ๋  ํ™•๋ฅ ์ด ์ ๋‹ค
  • ๋‹จ์  : ๋ฉ”์„ธ์ง€ ํŒจ์‹ฑ ๋ฐฉ์‹์„ ์ด์šฉํ•œ ์œ ์„œ ์ŠคํŽ˜์ด์Šค์—์„œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ํผํฌ๋จผ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๋‹ค