본문 바로가기
개발/컴퓨터 사이언스

운영체제와 Kernel

by Dahna 2022. 10. 4.

운영체제

목차

  • 운영체제의 구성 프로그램
    • 부트 로더
    • Kernel
    • Shell
  • Kernel의 구성요소
    • Process Management
    • synchronization
    • memory management
    • file system management
    • I/O managemant(device drivers)
    • hardware interrupt
    • system call
      • user level 과 kernel level

운영체제의 구성 프로그램

부트 로더

  • 컴퓨터가 켜졌을 때 운영체제에 필요한 조치를 취하고 하드 디스크 드라이브에 기록되어 있는 운영체제를 실행하는 프로그램이다.
  • BIOS setup => Boot loader(GRUB) => 운영체제 코드위치로 PC를 이동시켜준다.
  • MBR이라는 하드 디스크의 첫번째 섹터 구간에 운영체제 코드 혹은 위치가 저장되어있다.

Kernel

  • 하드웨어 자원(Hardware resource)을 관리하기 위한 프로그램

Shell

  • 프로그램을 실행시키는 프로그램
  • 프로그램을 실행할 수 있는 Interface 역할을 수행한다.(CLI - Command Line Interface)
  • 사용자의 지시(프로그램을 실행)를 해석하여 커널에게 전달(fork()라는 system call을 호출)해주는 역할을 맡는다.

Kernel의 구성요소

Process Management

  • CPU를 효율적으로 사용하기위해 사용하는 기법
  • 프로세스는 (Stack(user, kernel), heap, contant, static/global, code)로 나뉘어 관리된다.

Protection

  • Task(Process, thread, data flow)라는 단위로 프로그램을 실행시키고 관리한다.
    • 바꾸어 말하면 프로그램을 실행하기 위한 각각의 환경(context - register들)으로 나누어 실행시킨다고 볼 수 있다.
  • 프로세스들은 각각의 address space를 가지고 있기 때문에(각각의 다른 page table를 가짐) 다른 process로의 접근이 불가능(Protection)하다.
  • 다른 프로세스로 접근이 불가능 하기 때문에, 프로세스 사이에 데이터를 주고받기 위해서는 IPC(Inter Process Communication)이라는 프로세스간 통신기법을 사용해야 한다. (ex) Socket 통신, 네트워크 통신)

Parallel

  • Process management를 하는 이유는 동시에 여러 프로그램을 실행하기 위해서인데, CPU는 논리회로이기 때문에 동시에 실행한다는 것은 불가능하다.
  • 그렇기 때문에 일정시간(time slice)동안 한 프로세스가 CPU를 점유하고 다른 프로세스가 CPU를 점유하게 해야하는데, 다음에 실행할 Process를 scheduler가 결정한다.
  • 일정 시간이 지날때마다, timer는 interrupt를 호출하여 커널이 scheduling을 (or 다음 프로세스를 수행하도록)하도록 알려준다.

synchronization

  • critical section을 보호하기 위해 synchronization을 수행해야한다.

기법

  • mutex(0, 1), semaphore(0, 1, 2, 3, 4, 5 ~)
    • semaphore => 공유 변수 값은 0이상의 정수 값을 갖고, atomic instruction을 통해 down되거나 up된다.
      • 0 일때 waiting => process를 재움(sleep 상태로 보냄) + scheduling 되지 않음, 나중에 sema_up할때 깨워줌
      • 0 이상일때 1만큼 내리면서 다음 operation 수행
  • spinlock
    • semaphore와 비슷하지만 sleep 상태로 보내지 않고, busy waiting을 한다.
  • atomic instruction: 일어나거나 혹은 일어나지 않거나의 두가지 경우만 존재하는 operation
  • 여러 개의 프로세스들이 수행되는 시점을 조절하여 동시에 데이터를 write하는 것을 방지하기 위한 기법
  • race condition: 여러 개의 프로세스가 동일한 자료를 접근할 때 발생 
  • a process , b process num = num + 1, num = num + 1

memory management

  • 메모리를 효율적으로 사용하기 위한 메모리 관리 기법

기법

  • segmentation
    • 프로세스를 연속적인 메모리 공간에 할당(allocate)하는 방식
    • 여러 프로세스를 할당(allocate)하고, 해제(free)하는 과정에서 external fragmentation이 발생한다는 문제가 있다.
  • paging
    • 메모리를 페이지 단위(4KB)로 쪼개서 관리하는 기법
    • 프로세스마다 page table이라는 것을 만들어서 메모리의 논리적인 주소와 물리적인 주소를 mapping해준다.
    • 그렇기 때문에 프로세스는 메모리의 물리적인 주소로 직접 접근할 수 없다. (논리적인 주소로만 접근할 수 있다.)
    • (만약, 물리적인 주소로 말해도 OS는 그것을 논리적인 주소로 인식하여, 요청한 page에 해당하는 page table entry를 참조하여 물리 주소로 변환해주게 된다. 이 과정에서 Protection이 된다.)
  • virtual memory
    • 하드디스크도 page단위로 쪼개서 pagetable로 관리할 수 있게 하는 기술
    • (메모리를 page 단위로 나눈 것은 frame, 보조기억장치를 Page 단위로 나눈 것은 page)
    • 프로세스에서 사용하는 page들을 page table로 관리하기 때문에 page가 메모리에 존재하던, 보조기억장치(SSD)에 존재하던 상관이 없게 됨
    • 그런데 cpu는 메모리만 접근할 수 있기 때문에, page table을 참조했을 때, 해당 page가 메모리에 존재하지 않으면 이 상황을 page fault라고 하고, 보조기억장치에서 해당 페이지를 Memory로 올리라는 요청을 한 뒤에, process를 재운다(sleep)
    • 이후에 device가 요청을 수행하면 Hardware Interrupt로 재웠던 process를 깨워준다(wake up)

file system management

  • 파일과 폴더를 inode라는 형태로 관리하는 시스템 (ex)Ext4, F2FS, FAT32)

I/O managemant(device drivers)

  • 디바이스를 어떻게 동작(read / write)시킬 지에 대한 약속

hardware interrupt

  • 오래 걸리는 연산을 기다려두고, 연산이 완료되면 cpu에게 알려주는 하드웨어 장치

system call

  • kernel level 함수는 user level에서 직접 호출 할 수 없다.(왜냐하면 User application은 신뢰할 수 없기 때문에 막아놨다.)
  • 대신 kernel level 함수를 호출할 수 있게 interface를 제공해 놓았는데 그걸 우리는 system call이라고 부른다.

user level 과 kernel level

  • 우리가 실행하는 모든 프로그램은 user level에서 동작하는 것이고(shell 포함)
  • HW resource를 관리하기 위해 동작하는 함수들은 kernel level에서 동작
  • kenel level에 접근하기 위해서는 권한이 필요 (User level은 그 권한이 없음)
  • 그래서 우리가 User level에서 system call을 호출하면 user mode를 kernel모드로 전환해주는 trap이 호출되고, system call을 수행한다.
  • 참고: kernel 함수를 호출하기 위해서는, User mode에서 kernel mode 전환하고, PC(Program Counter)도 User code에서 Kernel code로 전환되고(context swiching을 포함), stack 또한 user stack에서 kernel stack으로 전환됨. 이러한 과정에서 발생하는 오버헤드는 필연적이다.

추가 정보

stream

  • 컴퓨터 프로그램이 입출력을 하기 위해 운영체제가 제공해주고 있는 추상화된 통로
  • stdin(#0), stdout(#1), stderr(#2)

Program

  • 기계어로 구성된 실행 가능한 파일
  • 이를 컴퓨터가 실행 가능한 부호로 변환한게 어셈블리어이다.
  • 어셈블리어는 operation과 operand로 구성된다.
  • cpu마다 operation set이 다르다.
  • 프로그램을 실행하기 위해서는 context와 stack이 필요하다.
  • context는 다양한 종류의 레지스터로 구성한 흐름이다.
  • 함수의 return address, 지역변수는 stack에 저장된다.
    • rbp 레지스터는 스택의 바닥을 가리킨다.

'개발 > 컴퓨터 사이언스' 카테고리의 다른 글

[운영체제] Memory Management  (0) 2022.12.04
스케쥴링  (0) 2022.11.20
Process와 Thread  (1) 2022.10.11
Instruction과 Pipelining  (0) 2022.09.27
CPU와 RAM  (1) 2022.09.21

댓글