[운영체제] 02. System Structure

유니·2021년 10월 10일
0

운영체제

목록 보기
2/3

🖥 OS가 하는 일

  • for user
    • user interface
    • program execution
    • I/O operation
    • file-system manipulation
    • communication
    • error detection
  • for resource management
    • computing 하기 위한 모든 것
    • resource allocation
    • protection and security

✍️ 이전의 OS

이전의 OS는 편의성을 제공해주기 위한 것이었다. 어떤 H/W든 application이 실행되도록 하기만 했으며 하나의 application이 동작하는 동안 다른 application은 동작할 수 없었다.
👉🏻 따라서 CPU, memory 등 자원을 활용하지 못했다.

📍 Multitasking

: 동시에 여러가지 일을 수행하는 것으로 여러 일을 memory에 올려놓고 resource를 필요한 부분에 효율적으로 배분한다.

Issue

  • CPU는 한 번에 하나의 일만 가능한데 어떻게 여러가지를 동시에?
  • 실행, CPU에 전달할 일은 memory에 있어야 하는데 만약 memory 공간이 부족하다면?
  • I/O를 기다릴 때 시간이 오래걸려 기다리는데 시간이 낭비됨
  • 어떤 일이 다른 일에 영향을 끼친다면?

Solution

  • process management : CPU가 주는 것을 빠르게 하면 동시에 하는 것처럼 보인다
  • memory management : main memory를 제한해 안 쓰는 건 disk 가상 메모리에 넣어 놓는다
  • I/O management : interrupt - 다 쓰면 알려줘서 지연 되는 것을 막아줄 수 있다
  • protection : 권한에 따라 다른 process 영역을 접근하지 못하게 메모리 영역을 분리해서 막아놓는다

📍 Process management

process : 진행중인 프로그램, OS에서 관리하는 작업의 단위
SSD에 있는 그냥 기계어를 번역한 것 뿐인 program이 memory에 올라가야 CPU와 통신을 할 수 있는데 memory에서 코드 실행을 위한 변수 등이 들어가는 작업공간까지 할당 받았을 때 모두 할당이 된 것을 process라고 부른다.

📍 Memory management

CPU와 통신하면 process를 읽어서 수행한 후 결과를 memory에 쓴다.
multitasking : memory에 process가 여러 개 있는 것
virtual memory management : memory의 용량이 제한적이기 때문에 process 그대로 disk에 저장

📍 File & Storage management

📍 I/O subsystem

  • device controller
  • device driver

application은 OS에 요청만 가능하다 - device를 건들지 못하게 👉🏻 I/O request
만약 하는 일이 끝났다면 interrupt한다.

data를 업데이트 하는 방법

  • polling : 계속 while문을 돌며 어떤 값이 들어왔는지 계속 체크한다
  • interrupt : 신경쓰지 않고 들어오면 얘기해달라고 하는 것

ex) C프로그램 실행 방법

명령 실행 → 명령 번역 → disk에 어디에 있는지 찾음 (OS의 file system management, disk scheduling) → disk에 있는 명령어 메모리에 복사 (OS의 memory management) → memory 공간까지 확보해서 process 만듦 (OS의 process management) → monitor에 print

🖥 Interrupt

: 하고 있는 일을 멈추고 다른 일 할때 생기는 것
: 한 process가 I/O device를 쓸 때에는 CPU는 다른 일을 하기 위해 CPU에게 operation이 끝났다고 말하는 것
👉🏻 device controller와 CPU 사이의 communication

  • hardware interrupt : 하드웨어 사이에서 발생하는 interrupt
    ex)마우스 움직임, 키보드 등
  • software interrupt : 소프트웨어에서 발생하는 interrupt
    • system call - application은 OS에서 제공하는 함수로 요청하는 것으로 지금하고 있는 것을 중단하고 OS 코드가 CPU에게 줌
    • exception - 하면 안되는 것을 하면 발생하는 것

interrupt가 발생하면 모든 일이 중단된다.
interrupt되면 실행되는 파일은 모두 memory에 올라가고 kernel mode에 있는 interrupt vector로 옮겨가 interrupt service routine을 실행한다.
👉🏻 n번 interrupt면 interrupt vector의 n번째 시작주소에서 실행

🖥 Multitasking

프로그램이 CPU를 사용하기 위해서는 process라는 이름으로 main memory에 상주한다.
: 다양한 프로그램이 main memory에 올라가 있으면 multitasking이 가능하다.

✍️ Advantage

  • CPU의 활용성 증가
    scheduling → 언제 누가, 어떤 process에 CPU를 할당할 것인가
  • time sharing
    빠른 속도로 process에 CPU를 할당하기 때문에 동시에 실행하는 것처럼 착각
    어떤 process에 CPU를 할당할 것인가 → CPU job Scheduling

🖥 Protection

✍️ Protection의 필요성

multitasking으로 인한 문제점

  • memory에 두 개 이상의 process가 존재하면 하나의 process가 다른 process에 영향을 미칠 수 있다.
  • ex 1) 코드를 잘못 짜서 메모리 주소를 잘못 쓴다면 OS를 덮어버릴 수 있음 → OS 제대로 동작하지 않음
  • ex 2) process B가 CPU를 쓰다가 process A에 이상한 값을 덮어버림 → A가 제대로 동작하지 않음

✍️ Protection

  1. memory protection : 서로 다른 process 영역 침범하지 못하도록 하는 것
  2. dual-mode operation : 사용자 process가 OS에 접근하지 못하도록 하는 것

OS previleged instruction
: OS만 할 수 있게 하는 것, 언제 할 수 있냐는 mode로 정한다.
ex) OS가 disk에 값을 쓴다고 했을 때 사용자가 값을 쓰지 못하게 하는 것

✍️ Dual-mode Operation

  • kernel mode : OS에 관련된 동작으로 OS에 있는 instruction을 사용한다
  • user mode : 사용자 process와 관련된 동작

👉🏻 CPU 안 register 안에 mode bit가 0이면 kernel mode, 1이면 user mode
📌 kernel mode면 전체 메모리에 접근이 가능하다. user mode면 kernel memory에 접근이 불가능하다.
ex) I/O device에서 파일을 읽을 때 OS에게 요청해 interrupt를 걸어서 요청한다

📍 System call

: interrupt이기에 interrupt vector로 가서 system call에 대한 interrupt service routin을 수행한다.
→ OS에 요청해 system call이 호출되면 mode bit가 0으로 바뀌고 OS가 해당하는 일에 대해 해준다
system call을 호출하면 process는 CPU를 사용하지 않고 기다리고 CPU는 system call에 해당하는 코드에 사용된다.

ex) 파일 복사법
SSD 안에 있는 파일 데이터를 memory에 읽어온 후 SSD의 다른 위치에 다시 쓴다.
👉🏻 disk에 써야하기 때문에 OS에서 해야 한다 (system call)

system call도 다른 system call을 호출한다.

  • process control
    SSD에 있는 파일을 실행하면 memory에 process로 만들어지는데 이러한 process가 만들고 지워지는 것
  • file management
  • device management
  • system information maintenance
  • communication
    process간의 통신 - protection 때문에 서로 데이터 전달이 안되기 때문

📍 Application Programming Interface (API)

: system call을 제공하는 것으로 프로그래머가 사용하는 함수이다.

system call을 쓰지 않고 library api 쓰는 이유

  • system call은 정밀하게 제어하기 위해 파라미터가 많다
  • 어떤 플랫폼에서든 동일하게 동작하고 어디서 돌리든 compiler가 알아서 번역하기 때문 → OS마다 system call이 다르기 때문

👉🏻 printf()라는 api call을 사용하면 write()는 system call을 호출해 실행하면 interrupt 걸림

function call

: system call과는 다른 것으로 process 안에서 함수를 호출해 함수 위치로 program counter가 이돌하는 것

🖥 System Programs

: system call을 이용해서 만든 프로그램
ex) 작업 관리자

🖥 OS의 구조

kernel : 모든 system programm이 구현되어 있는 집합체

MS DOS
application과 H/W를 정확히 차단하지 못해 application이 직접 H/W를 건드릴 수 있었다

Monolithic structure
한 덩어리로 UNIX가 예이다
모든 기능이 하나의 실행 차일 안에 들어있어 매우 빠르고 외부랑 소통할 일이 없다. 하지만 너무 크고 수정할 부분이 있으면 다시 하나의 파일을 만들어 build해야 해서 오래 걸리고 불편하다.

microkernel system structure
하나의 커널이 여러 개의 kernel로 쪼개져 있어 kernel이 작아졌다.
kernel 자체가 가벼워져 수정이 용이해졌으나 process끼리 통신을 하지 못해 OS를 이용해야 하기 때문에 느리고 overhead가 발생한다.

loadable kernel module
kernel 모드에서 동작하는데 핵심 kernel이 있고 나머지는 필요할 때마다 올렸다 내렸다 하는 것이다.

Hybrid systems
monolithic과 microkernel의 장점만 취한 것이다.

0개의 댓글