๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸง Operating System

[OS / ์šด์˜์ฒด์ œ] Command Line Interpreter, Programming Interfaces, Dual Mode Operation, Dual Mode Operation, System call, Process Control: Load/Execution, FreeBSD Unix, MS-DOS, Device Management, System Programs

by UKHYUN22 2022. 3. 14.
728x90

Operating System Services

 

 

 


Command Line Interpreter

putty, xterm, MacOS terminal์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ดˆ๋ณด์ž๋“คํ•œํ…Œ๋Š” ๋งŽ์ด ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

 


Programming Interfaces


์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Interface๋Š” System call์ด๋‹ค. POSIX IO call์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ call๋“ค์ด ์žˆ๋‹ค. ํŒŒ์ผ์„ ์—ด๊ณ  ์ฝ๊ณ  ์“ฐ๊ณ  ๋‹ซ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. User Interfaces๋Š” ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. System call์€ Interrupt์— ์˜ํ•ด์„œ call ๋œ๋‹ค. ๋ณดํ†ต ์‚ฌ์šฉํ•˜๋Š” high level language๋Š” Interrupt๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Bridge ์—ญํ• ์ด ํ•„์š”ํ•œ๋ฐ ๊ทธ๊ฒŒ System call Interface์˜ ์—ญํ• ์ด๋‹ค. POSIX์— ๋Œ€ํ•œ ์†Œ๊ฐœ๊ฐ€ ์žˆ๋‹ค. UNIX์˜ Standard์ด๋‹ค. Linux ๋Š” ๊ณต์‹์ ์œผ๋กœ POSIX ์ธ์ •์„ ๋ฐ›์ง€๋Š” ์•Š์ง€๋งŒ Unix ์˜ Implementation์ด๋ผ๊ณ  ์ธ์ •๋ฐ›๊ณ  ์žˆ๋‹ค.

 


System call


Function call๊ณผ ์œ ์‚ฌํ•œ ์ ์ด ์žˆ๋‹ค. Application program์ด Usermode์— ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. Device๋ฅผ Accessํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๊ถŒํ•œ์ด ์—†์–ด์„œ kernel์— ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. Kernel์€ Device์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ Function call๊ณผ ๋‹ค๋ฅธ ๊ฒƒ์€ Interrupt ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Interrupt handler๋กœ jump๋ฅผ ํ•˜๊ฒŒ ๋˜๊ณ  ์ด๋Š” kernel ์•ˆ์— ์œ„์น˜ํ•œ ์•ˆ์ „ํ•˜๊ณ  ๊ฒ€์ฆ๋œ ์ฝ”๋“œ์ด๋‹ค. C C++๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด์„œ ์†๋„ ๋˜ํ•œ ๋น ๋ฅธ ํŠน์ง•์ด ์žˆ๋‹ค. ์–ด์งธ์„œ System call์€ Interrupt call์ด๋ผ๋Š” ๋ณต์žกํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ์•ˆ์ „ํ•˜๊ฒŒ Kernel mode๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์–ด ์ฒด์žฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Dual Mode Operation


ํ•˜๋‚˜๋Š” User mode์ด๊ณ  ํ•˜๋‚˜๋Š” kernel mode์ด๋‹ค. OS ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฉด kernel์— ๋„์›€์„ ์š”์ฒญํ•˜๊ณ  Kernel service๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ kernel mode๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. usermode์—์„œ kernel mode๋กœ ์ „ํ™˜์„ ํ• ๋•Œ preveledge๊ฐ€ ๋‚ฎ์€ mode์—์„œ ๋†’์€ mode๋กœ ๋ณ€ํ™˜๋˜๋Š” ํƒ€์ด๋ฐ์ธ๋ฐ ๋งŒ์•ฝ ์ด๋Ÿฐ ์ „ํ™˜์ด ์•„๋ฌด ์ œ์•ฝ์—†์ด ์‰ฝ๊ฒŒ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด user์™€ kernel์„ ๊ตฌ๋ถ„ํ•  ํ•„์š”์„ฑ์ด ์—†์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ ๊ฒƒ์ด Interrupt ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ์œ„ํ—˜ํ•œ ๋™์ž‘์„ ๋‹ค ๋ง‰์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. Interrupt๋ฅผ ๋‚ ๋ฆฌ๋Š” ์ˆœ๊ฐ„ Interrupt handler๋กœ ์ œ์•ฝ๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  Kernel์•ˆ์— ์กด์žฌํ•˜๋ฉฐ ์•ˆ์ „ํ•˜๋‹ค. Interrupt vector๋ผ๋Š” Table์ด ๊ด€์—ฌํ•˜๊ฒŒ ๋œ๋‹ค. jumpํ•  ์ˆ˜ ์žˆ๋Š” ๋ชฉ์ ์ง€๋Š” Interrupt handler๋กœ ๊ตญํ•œ๋˜๊ฒŒ ๋œ๋‹ค. Kernel mode๋กœ ๋Œ์•„๊ฐˆ ๋•Œ ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋งŒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋‹ค์‹œ user mode๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋ ๋•Œ ๋†’์€ Preveldge์—์„œ ๋‚ฎ์€ ๊ณณ์œผ๋กœ ์ด๋™์ด์—ฌ์„œ ๋ณ„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 


Parameter Passing in System call


Function์—๋Š” parameter๊ฐ€ ์žˆ๋‹ค. System call์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋ž˜์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ž˜์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๊ฐ€์ง€๊ณ  Interrupt๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  Handler๊ฐ€ ๊ทธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์ •๋ณด๊ฐ€ ์ž‘์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •๋ณด๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์ฃผ์†Œ๊ฐ’์„ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ ์กด์žฌํ•˜๊ณ , System stack์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Fucntion call parameter local variable์„ ์‚ฌ์šฉํ•  ๋•Œ ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

 


Example


file์„ Copyํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ๊ฐํ•ด๋ณด์ž. A์—์„œ B๋กœ ์นดํ”ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. srcFile๊ณผ destFile์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ์„ ์—ด๊ณ  ์ƒ์„ฑํ•œํ›„ Read์™€ Writhe๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. close๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๊ณผ์ •์— user์—์„œ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋ฌผ์–ด๋ณธ๋‹ค๋ฉด IO Device๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. User์—๊ฒŒ ํŒŒ์ผ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜์„ธ์š” ๋ผ๋Š” ๊ฒƒ๋„ OS๋ฅผ ํ†ตํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๊ณ  System call์— ์˜ํ•ด์„œ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ „๋ถ€ ๋‹ค OS์˜ System call์ด ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์‹ค์ƒ ๊ต‰์žฅํžˆ ๋งŽ์€ OS์˜ System call์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 


System call Interface


open์ด๋ผ๋Š” function์„ ์ƒ๊ฐํ•ด๋ณด์ž. open์€ kernel์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ณ  kernel์˜ ๊ธฐ๋Šฅ์€ system call๋กœ ์ œ๊ณต๋˜๊ณ  system call์€ Interrupt๋กœ ์ œ๊ณต๋œ๋‹ค. High level language๋Š” function์˜ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ Function call Interface์™€ OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” Interrupt driven Interface์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๊ฒƒ์ด System call Interface ์ด๋‹ค. ๊ทธ๋ฆผ์—์„œ Interrupt vector๋ผ๋Š” ํŒŒ๋ž€์ƒ‰ ์ƒ์ž๊ฐ€ ๋ณด์ธ๋‹ค. 

 

 


System call Interface


์™ผ์ชฝ์€ user์˜ code์ด๋‹ค. ์ด ์ฝ”๋“œ์—์„œ Open์ด๋ผ๋Š” function์„ callํ•˜๊ฒŒ ๋„๋‹ˆ๋‹ค. open์€ System call Interface ์•ˆ์— ์žˆ๋Š” function call์ด๋‹ค. ๋‚ด๋ถ€์—๋Š” ์–ด์ƒ˜๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. C์–ธ์–ด ์•ˆ์— ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ in-line assembly code๋ผ๊ณ  ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด๋Š” 5๋ผ๋Š” ์ˆซ์ž๋ฅผ eax๋ผ๋Š” ๋ž˜์ง€์Šคํ„ฐ์— ์ง‘์–ด๋„ฃ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. int 0x80์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” int๋Š” Interrupt๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค. 80๋ฒˆ์˜ Interrupt๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค. Linux์˜ ๋ชจ๋“  ์ข…๋ฅ˜์˜ Interrupt๋Š” 80๋ฒˆ์„ ํ†ตํ•ด์„œ ์„œ๋น„์Šค๊ฐ€ ๋˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค.  System call๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ interrupt 80๋ฒˆ์„ ํ†ต๊ณผํ•ด์•ผ System call์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. open์˜ ๊ฒฝ์šฐ 5๋ฒˆ์ด ์ง€์ •๋˜์–ด ์žˆ๋‹ค. System call ๋ฒˆํ˜ธ๋ฅผ ๋ž˜์ง€์Šคํ„ฐ์— ์ง‘์–ด๋„ฃ๊ณ  80๋ฒˆ Interrupt๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ ์ œ์–ด๊ฐ€ interrupt Handler๋กœ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  80๋ฒˆ Entry๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. 80๋ฒˆ Handler๊ฐ€Interrupt Handler์ด๊ณ  eax ๋ž˜์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค. ์‹ค์ œ ๊ทธ open์„ ์ฒ˜๋ฆฌํ•ด์ค„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค. sys_open์ด๋ผ๋Š” ์‹ค์ œ open์„ ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” function์ด๋‹ค. mode ์ „ํ™˜์€ Interrupt๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ˆœ๊ฐ„ ์ „ํ™˜๋œ๋‹ค. sys_open์€ kernel mode์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋™์ž‘์ด ๋๋‚˜๋ฉด Interrupt return ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์ดํ•ด์„œ open function์œผ๋กœ ๋Œ์•„์˜ค๊ณ  ๋‹ค์‹œ user์˜ open ์ฝ”๋“œ๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋œ๋‹ค.

 


System call Interface


80๋ฒˆ ๋ฆฌ๋ˆ…์Šค์— ์˜ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค. System call์„ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•ด์ค„ Handler๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ System call table์ด ์กด์žฌํ•œ๋‹ค. Interrupt vector table๊ณผ ๊ตฌ๋ถ„๋œ๋‹ค. 80๋ฒˆ Interrupt๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Interrupt vector๋ฅผ ์ฐธ์กฐํ•ด์„œ 80๋ฒˆ Interrupt๋ฅผ ์ฐพ์•„์„œ jumpํ•˜๊ฒŒ ๋œ๋‹ค. 80๋ฒˆ handler๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์ง€๊ธˆ ๋‚ด๊ฐ€ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” System call์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ System call handler๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” table์„ ์‚ดํŽด์•ผ ํ•œ๋‹ค. ๊ทธ Index System call Number๊ฐ€ ๋œ๋‹ค. ์ด์ „์— ๋ž˜์ง€์Šคํ„ฐ์— ๋‹ด๊ธด 5๋ผ๋Š” ์ˆซ์ž์— ๋Œ€์‘ํ•œ๋‹ค. User ์ž…์žฅ์—์„œ System call Interface๊ฐ€
์ผ๋ฐ˜ ์ ์ธ function call๊ณผ ๋ณ„ ๋‹ค๋ฆ„์ด ์—†์–ด ๋ณด์ธ๋‹ค. 

 

 


System-call Interface


System call์„ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. User mode์—์„œ kernel mode๋กœ ์Šค์œ„์นญ์„ ํ•œ๋‹ค. Interrupt๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ˆœ๊ฐ„ ์ „ํ™˜์ด ๋œ๋‹ค. ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ด ์žˆ๋‹ค๋ฉด System call Interface๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. read์™€ fread์˜ ์ฐจ์ด์ ์€?? read๋Š” OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” System call์ด๋‹ค. fread๋Š” C ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. C์–ธ์–ด๋Š” ํŠน์ •๋œ OS์— ์ข…์†๋˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ๋ชจ์•„์„œ ํ†ต์ผ๋˜๊ฒŒ ๋ชจ์€ ๊ฒƒ์ด Standard function์ด๋‹ค. ๋ณดํ†ต OS์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ OS๋ฅผ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ fread๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 


API


OS๋‚˜ library๋‚˜ application์ด ์ž๊ธฐ์˜ ๊ธฐ๋Šฅ์„ ์„œ๋น„์Šค๋กœ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•ด๋†“์€ Interface๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Windows์˜ ๊ฒฝ์šฐ system call๊ณผ API๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. API๋Š” System call์„ ์กฐํ•ฉํ•ด์„œ ๋งŒ๋“  ๋” High level feature์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MessageBox function์ด API์— ํ•ด๋‹นํ•œ๋‹ค. ๋ฐ”๋‹ฅ์— Primitiveํ•œ System call์ด ์žˆ๊ณ  ์กฐํ•ฉ์„ ํ•ด์„œ API๋ผ๋Š” high level feature๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

 

 


Example of API


window์— ์žˆ๋Š” API function์ด ์žˆ๋‹ค. 

 

 


Example of System call


์œˆ๋„์šฐ

CreateProcess๋ผ๋Š” ๊ฒƒ์€ Unix์˜ forkํ•จ์ˆ˜์— ๋Œ€์‘ํ•œ๋‹ค. 

 

 


Process Control: Load/Execution


ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ๋งˆ์šฐ์Šค๋กœ ๋”๋ธ” ํด๋ฆญ์„ ํ•œ๋‹ค. ๊ทธ ๊ณผ์ •์— OS๊ฐ€ ๊ฐœ์ž…๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด User๊ฐ€ ๋”๋ธ” ํด๋ฆญ์„ ํ•˜๋ฉด Interrupt๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  Interrupt Handler๋กœ ์ ํ”„ํ•˜๊ฒŒ ๋˜๊ณ  ๋งˆ์šฐ์Šค๋ผ๊ณ  ์ธ์‹์„ ํ•˜๋ฉฐ Handler๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ตฌ๋‚˜๋ฅผ ํŒŒ์•…ํ•˜๋ฉฐ OS๊ฐ€ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งˆ์ง€๋ง‰์— ํ”„๋กœ๊ทธ๋žจ์„ ์‹œํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋Š” OS๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. CLI ๋กœ ๋Œ๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ CLI์— ์ƒˆ๋กœ์šด Child Process๋ฅผ ๋งŒ๋“œ๋Š” Parent ์—ญํ• ์„ ํ•œ๋‹ค. Process Creation ์—ญํ• ์„ ํ•œ๋‹ค. Child Process ๋งŒ๋“ค์–ด์ง€๋Š” ๋™์•ˆ Parent๊ฐ€ ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š”๊ฐ€? CHild๊ฐ€ ์‹คํ–‰๋  ๋•Œ Parent Proecss๊ฐ€ ๋Œ€์ฒด๋˜๋Š” ๊ฒฝ์šฐ ์†Œ์‹ค๋œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

 ๋‘ ๋ฒˆ์งธ์˜ ๊ฒฝ์šฐ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. CLI๊ฐ€ pause ๋œ๋‹ค. Parent Process๊ฐ€ Child Process์™€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. MacOS Finder์˜ ๊ฒฝ์šฐ ์‹คํ–‰์„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ฐ™์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 


MS-DOS


Single tasking program์ด๋‹ค. booting ์ด ๋๋‚˜๋ฉด kernel์ด ๊ฐ€์žฅ ๋‚ฎ์€ address mode์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๊ทธ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๊ฐ€ ๋˜๊ณ  ์‹คํ–‰์ด ๋œ๋‹ค. Command Interpreter๋ฅผ overwriteํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฐ ๊ผผ์ˆ˜์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 


FreeBSD Unix


Booting์„ ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋ชจ๋‘๊ฐ€ ๋‹ค ๋Œ€๋“ฑํ•œ ์ง€์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Unix์—์„œ๋Š” Commend line Interpreter๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. Command Line Interpreter๊ฐ€ kernel์˜ ์ผ๋ถ€๊ฐ€ ๋…๋ฆฝ๋œ Userlevel์˜ ํ”„๋กœ๊ทธ๋žจ์ด์–ด์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—ˆ๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ์— CLI์—์„œ ์‹คํ–‰์‹œํ‚จ๋‹ค. shell์— ํ”„๋กœ๊ทธ๋žจ์„ ์ž…๋ ฅ์„ ํ•˜๋ฉด fork๋ผ๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. Parent Process์™€ ๊ฑฐ์˜ ๋˜‘๊ฐ™์ด ์ƒ๊ธด Child Process๋ฅผ ์ƒ์„ฑ์‹œํ‚จ๋‹ค. ์™œ ๋ณต์‚ฌํŒ์„ ๋งŒ๋“œ๋Š”๊ฐ€?


์‚ฌ์‹ค Unix์—์„œ ์ƒˆ๋กœ์šด Process๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ Parent Process๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ตฌํ˜„ ์ƒ์—์„œ ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์š”๊ตฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. Child Process๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ€์ฒด๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. exec์ด๋ผ๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ๊ทธ์—ญํ• ์„ ํ•œ๋‹ค. ํ˜„์žฌ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. ์ดˆ๊ธฐ์—๋Š” CLI์˜€๋Š”๋ฐ exec๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. ๋จผ์ € fork๋ฅผ ํ•˜๋ฉด wait์ด๋ผ๋Š” function call์„ ํ†ตํ•ด ํ˜„์žฌ ์žˆ๋Š” ์ƒํƒœ๋กœ ๊ธฐ๋‹ค๋ฆฌ๋ผ๋Š” ๋ช…๋ น์„ ํ•˜๊ฒŒ ๋˜๊ณ  child process๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค. child๊ฐ€ exec์— ์˜ํ•ด์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋Œ€์ฒด๋˜๊ณ  ๊ทธ ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ€๋Š” ๋™์•ˆ Parent process๋Š” ๋ฉˆ์ถฐ์žˆ๊ฒŒ ๋œ๋‹ค. exit์„ ํ†ตํ•ด์„œ ์ข…๋ฃŒํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์‹œ Parent Process๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. CLI Interpreter์˜ ์—ญํ• ์ด๋‹ค. ๋™์‹œ์— ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. Wait System call์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋œ๋‹ค. ์›๋ž˜ fork๋ฅผ ํ˜ธ์ถœํ•œ Parent process๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค. 

 


Process Control: Load Execution


Process๊ฐ€ Process๋ฅผ control ํ•  ์ˆ˜ ์žˆ๋‹ค. Max execution time์„ ํ•˜๊ฑฐ๋‚˜ ๋ฉˆ์ถ˜๋‹ค๊ฑฐ๋‚˜์˜ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆด ์ˆ˜๋„ ์žˆ๊ณ  ์ •ํ•ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋‹ค. Event๋ฅผ Parentํ•œํ…Œ ์ „ํ•˜๋Š” ์ˆœ๊ฐ„๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Debugging


๋””๋ฒ„๊น… ๋‹คํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ•œ Statement์”ฉ ๋˜๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ •ํ•œ ์˜์—ญ๋งŒ ์‹คํ–‰์‹œํ‚ค๊ณ  ๋‹ค์‹œ parent๋กœ ์ œ์–ด๊ถŒ์ด ๋Œ์•„์˜ค๋Š” ๋“ฑ์˜ ๋ฐ˜๋ณต์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 


Termination


Normal Termination, ์—๋Ÿฌ ์—†์ด ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒํ•˜๋Š” ๊ณผ์ •. ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ• ๋‹นํ–ˆ๋˜ Resource๋ฅผ deallocation์„ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ํšŒ์ˆ˜ํ•˜๊ณ  ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ด์–ด๋†“์€ ํŒŒ์ผ์„ close๋ฅผ ํ•œ๋‹ค. 

๋ฐ˜๋ฉด ๋น„์ •์ƒ์ข…๋ฃŒ์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅด๋‹ค. User๊ฐ€ ์›ํ•˜๋Š” ์ƒํ™ฉ์ด ์•„๋‹ˆ๊ธฐ์— ์ถ”๊ฐ€์ ์ธ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜„์žฌ ์ƒํ™ฉ์„ dump ํ•ด๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์‚ฌ ๋‚˜์ค‘์— ๊ทธ ์ƒํ™ฉ์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ๋‚จ๊ฒจ๋†“๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 


File Management


Createํ•˜๊ณ  Delete/  Read write repotion / Get set file / Directory Operation / More service
ls๋ผ๋Š” ๋ช…๋ น์–ด. OS์˜ kernel์ด ์•„๋‹ˆ๊ณ  ๋ณ„๋„์˜ ls๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ API๋‚˜ System call์„ ํ†ตํ•ด์„œ OS๊ฐ€ ์ง์ ‘ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด์„œ File management๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

 


Device Management


์‚ฌ์šฉ๊ถŒ์„ ์ „๋‹ฌํ•  ๋•Œ ๋…์ ์ ์ธ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ์ค‘์— ์žˆ๋Š” Resource๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” wait๋ฅผ ํ•˜๊ฒŒ ํ•œ๋‹ค. Resource allocation์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ ๋ฆฌ์†Œ์Šค์— Read์™€ Write operation์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ ํ›„ ๋ฐ˜๋‚ฉ์„ ํ•˜๋Š”๋ฐ Release๋ผ๊ณ  ํ•œ๋‹ค.

 


Device Management


file ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ network์™€ printer์— ๊ฐ๊ฐ read์™€ write๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ ํŒŒ์ผ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ Device๋ฅผ ๊ฐ€์ƒ์˜ ํ™˜๊ฒฝ์ธ ๊ฒƒ์ฒ˜๋Ÿผ Device๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Consistence๊ฐ€ ์ข‹์•„์ง€๊ณ  ๋™์ผํ•œ flow์˜ ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Information Maintenance

 

 


System Programs


๊ธฐ๋ณธ์ ์œผ๋กœ User mode์—์„œ ๋™์ž‘ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ Application program์ด๋‹ค. ๊ตฌ์ฒด์ ์ธ task๋ฅผ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๋ผ๊ธฐ ๋ณด๋‹ค ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.