운영체제 - Operating System Overview

boms·2024년 3월 25일
0

Operating System Structure

  • Process Management
  • Memory Management
  • Storage Management
  • Mass-Storage Management

Multiprogramming

  • Cpu가 불필요한 대기를 하지 않기 위해서는 프로그램 하나만으로는 부족하다
  • Cpu를 다른 프로그램을 실행하는데 사용할 수 있도록 함으로서 자원 활용의 효율을 높이는 목적으로 multiprogramming한다
  • 동시에 Application 여러개를 실행할 수 있도록 운영체제가 관리한다
  • 여러개의 프로그램들이 메모리에 다 올라와야한다
    - 공간이 부족하여 virtual memory를 사용한다
  • Process management 입장에서 여러개의 수행 가능한 프로그램이 있을 때 어떤 프로그램을 Cpu가 수행할 것인지 결정 해야한다
    - cpu/process/job scheduling
  • IO가 발생해 Cpu가 대기해야하는 상황이 생길때 운영체제가 다른 프로그램으로 Switch 해주는 기능이 필요하다

Multitasking (Timesharing)

  • CPU는 모든 프로그램을 수행해야하지만 동시에 하지 못한다
  • 따라서 CPU 사용 시간을 짧게 나눠서 모두 진도를 나간다
  • 모든 프로그램이 동시에 실행되기 때문에 interacting computing이 가능하다
  • Response time 응답시간이 작아야한다
  • 메모리에 올라간 프로그램 (process)이 적어도 하나 필요하다
  • 시간이 지나면 다른 프로그램으로 넘어가야 하기 때문에 Cpu scheduling이 필요하다
  • 여러개의 process를 위한 memory 공간이 없다면 swapping이 필요하다
    - swapping이란 실행되지 않는 프로그램을 disk로 보내고 실행되는 프로그램은 memory에 올려 공간은 확보하는 작업이다
    • disk를 사용하면 느려진다 -> memory managment 필요
  • swapping을 효과적으로 하기 위해 virtual memory 기술이 필요하다
    - 프로그램에서 당장 실행해야하는 부분만 memory에 올리는 기술이다
    • memory 사용 공간을 줄여 더 많은 프로그램을 동시에 메모리에 올릴 수 있다

Operating System Operations

Interrupt Driven By Hardware

  • Cpu가 계속 IO 입력을 기다리며 루프를 도는것은 매우 비효율적이다
  • 대신에 IO 입력이 들어왔을때 IO 장치가 Cpu에게 알려주면 Cpu를 더 효율적으로 사용할 수 있다
  • 따라서 IO 장치가 interrupt를 발생시키면 Cpu가 해당 interrupt를 handling함으로서 하드웨어 입출력을 관리한다

Exception, Trap

  • IO 장치 말고도 소프트웨어에서도 interrupt와 비슷하게 동작해야하는 경우가 있다
  • divide by zero와 같은 에러는 에러 파급 효과를 줄이기 위해 먼저 처리해야한다

System Call

  • 운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다
  • 유저는 library 함수를 호출하여 간접적으로 system call을 호출한다

application을 통해 화면에 출력하고 싶다 -> 하드웨어에 접근해야 한다 -> 하드웨어 접근은 OS가 통제한다 -> OS에 요청해야 한다 -> OS 요청은 system call으로 한다 -> system call을 편리하게 호출할 수 있도록 제공된 library 함수 printf를 사용한다 -> printf는 system call write를 호출한다

Dual-mode

  • 유저가 직접 만든 코드를 실행하다가 OS의 system call을 실행하는 단계로 넘어가야한다
  • 권한이 달라지기 때문에 application code와 OS code가 구분되어야 한다
  • 하지만 cpu는 instruction을 memory에서 가져와 실행만 하기 때문에 구분하지 못한다
  • 따라서 Program Status Register의 mode bit을 사용한다
    - system call 호출 직전에 mode bit를 kernal mode로 세팅

Transition from User to Kernel Mode

  • calls system call
    - system call 호출하는 순간 trap이 걸려 mode bit = 0 (kernel mode)로 세팅된다
  • execute system call
    - os code가 실행된다
    • 완료가되면 mode bit = 1 (user mode)로 세팅하고 system call 수행 결과 값을 return한다

Process Management

Process

  • 프로그램 실행을 위한 모든 정보를 담고있는 구조체 자료구조이다
  • 이 자료구조가 메모리에 올라가면 Cpu가 접근하여 연산할 수 있게 된다
  • 프로그램은 passive, 프로세스는 active entity다

Process Resources

  • 프로그램을 실행시키기 위해서는 cpu, memory, IO, files, 사용 데이터가 필요하다
  • 이것들을 하나로 묶어서 관리하고 묶기 위한 자료구조 (process)를 OS가 제공한다

Single/Multi-threaded Process

  • single인 경우 program counter가 한개지만 multi인 경우 여러개다

사용자가 아이콘을 더블 클릭 -> Process라는 자료구조가 생성된다 -> 이 자료구조에 정보를 채우고 메모리에 올린다 -> Cpu scheduling 대상에 등록 -> Cpu가 해당 process를 실행한다 -> 프로그램이 종료되면 process 자료구조를 삭제한다

Process Management Activities

  • OS가 process management를 위해 하는 일
  • process 생성, 삭제
  • process 일시중지, 재게
  • process 동기화
  • process간 통신
  • deadlock handling

Memory Management

  • 여러개의 프로그램이 동시에 실행되면 여러개의 process가 메모리에 올라간다
  • OS는 어떤 process가 메모리 어디에 올라가있는지, 어떤 process를 swap in 혹은 out 할 것인지, 사용중이거나 비어있는 메모리 영역, 메모리 할당 및 해체 등 관리해야한다

Storage Management

  • 하드디스크 공간 체계가 매우 복잡해 application에 그대로 노출할 수 없다
  • 따라서 OS는 application이 하드디스크 공간을 쉽게 사용할 수 있도록 도와준다
  • application은 하드디스크 공간에 대해 알필요없이 file이라는 개념만 알고 간접적으로 접근한다
  • 유저는 file에 쓰고 OS가 대신 하드디스크에 반영한다

File-System Management

  • directory란 file을 체계적으로 저장하는 방법이다
  • OS가 file-system management를 위해 하는 일
    - 파일과 디렉토리 생성, 삭제
    • 파일 값 변경
    • 파일을 secondary storage(hard,ssd)에 저장
    • 파일 백업

Mass-Storage Management

  • OS는 file을 하드에 저장하기 위해서 하드 저장 공간 구성 등에 대해 알고 있어야한다
  • Free space management
  • Storage allocation
  • Disk scheduling
    - IO가 느리기 때문에 IO 요청할 때 요청 순서를 적절히 조정하여 하드 헤드 움직임 최소화하는 방법

Migration from Disk to Register

Multitasking Issue

  • 여러 프로그램이 동시에 돌고있다
  • 어떤 데이터가 cache 혹은 main memory에 올라와있다
  • 모든 프로그램은 그 데이터의 최신값을 기반으로 동작해야한다
  • 따라서 OS는 접근하는 데이터가 최신값이라는 것을 보장해야한다

Multiprocessor Issue

  • cpu 혹은 core가 여러개인 경우 cache가 여러개라서 더 복잡해진다
  • 1번과 2번 cpu에서 main memory의 데이터를 접근하면 각각의 cache에 올라간다
  • 1번과 2번에서 operation을 하다보면 각각의 cache에 값을 업데이트하게 된다
  • 1번에서 업데이트한 값은 2번에 반영이 안되는 문제가 발생한다 (cache coherence problem)
  • 따라서 OS는 어떤 데이터가 여러 cache에 올라가 있으면 cache 값을 일치하도록 만들어야한다

Distributed System Issue

  • 분산 시스템에서는 여러대의 컴퓨터가 똑같은 일을 나눠서 한다
  • 똑같은 데이터를 대상으로 하기 때문에 컴퓨터마다 가지고 있는 데이터 값이 달라질 수 있다
  • cache coherence problem와 비슷하고 더 큰 규모로 문제가 발생한다

I/O Subsystem

  • IO 장치는 종류가 많고 제조사도 많다
  • OS는 사용자가 다양한 IO 장치를 다 구분해서 사용할 필요없도록 만든다
    - block device, character device로만 구분
  • OS는 IO 장치가 느리기 때문에 소프트웨어적 기능을 제공한다
    - buffering: 임시 저장 공간
    • caching: 자주 접근되는 하드 데이터를 memory에 올리기
    • spooling: 어떤 작업이 생성해낸 output을 다른 작업에 보낼때 직접 보내지않고 중간 임시 공간 spool에 보낸다. 그리고 다른 작업이 spool에서 읽어간다. ex) printer의 느린 속도를 만회해준다

Protection and Security

  • Protection은 유저가 권한 밖에 있는 자원에 접근하려 할 때 막아주는 작업이다
  • OS는 ID를 기준을 권한을 체크한다
  • 모든 유저에게 ID를 부여하고 권한을 부여한다
  • file을 만든 유저가 다른 유저에 대한 권한을 설정할 수 있다
  • 내가 실행한 processs는 내가 가진 권한을 승계 받는다
  • 그룹 ID는 유저를 묶어서 권한을 줄 때 사용된다

Privilege Escaltion

  • Printer를 예시로 보자
  • OS가 관리하는 spool 영역은 사용자 영역이 아니기 때문에 유저 ID 권한으로 접근 못하는게 맞다
  • HWP를 실행할 때 유저 ID 권한으로 시작하지만 중간에 잠시 권한을 상승시킨다
  • spool 영역에 다 쓰면 권한을 회수한다
  • 즉 OS는 동작 과정에서 권한을 상승시키는 기능을 제공한다

Operating System Services

  • User interface

  • Program execution

  • IO operations

  • File system manipulation

  • Communication: 프로세스들간 통신

  • Error detection

  • Resource allocation: process 메모리 할당 공간

  • Accounting : 어떤 사용자가 얼마나 많은 자원을 사용하는지

  • Protection and security

  • 상위 application은 하위 OS 서비스를 사용하기 위해 system call을 호출해야한다

  • 직접 system call을 호출하지않고 라이브러리 함수를 사용하거나 GUI를 사용한다
    - ex) GUI: 더블 클릭하면 fork 시스템콜을 호출하고 program execution 서비스도 호출한다

System Call

  • System call은 OS 서비스를 호출하는 인터페이스다
  • 사용자는 high level API를 통해 system call을 사용한다
    - ex) printf 안에 형식에 맞게 write 시스템콜이 여러번 호출된다
  • OS마다 system call이 다르기 때문에 API를 사용해야 편리하다
  • 유저가 OS dependent한 system call을 호출하지 않고 하나의 API로 여러 OS에서 실행할 수 있는 소스코드를 만들 수 있다
  • 이식성, 편리함

Portability

  • programming language api > os 계열 api 순으로 이식성이 좋아진다
  • Win32 api, Posix api for UNIX Linux Mac os, Java api for JVM
  • ex) printf는 c programming lanauge에서 제공하기 때문에 계열이 다른 OS에서 알아서 compile한다

Example Execution

  • file을 다른 file로 copy하는 상황
  • copy라는 system call은 system call 여러개의 조합이다

Implementation

  • system call마다 테이블 인덱스를 붙인다
    - 호출하면 해당 인덱스를 찾아가 system call가 존재하는 메모리 주소를 PC에 넣고 jump한다
    - 메모리상의 위치를 알아야 실행할 수 있다!
  • 사용자는 API만 알면 된다

Direct System Call

  • 유저가 직접 open system call을 호출한다
  • open에 할당된 인덱스 번호 i로 테이블을 찾아간다
  • 이곳에는 open의 메모리 주소를 저장하고있다
  • open이 실행되고 user 프로그램이 리턴값을 받는다

API System Call

  • 유저는 c의 printf() API를 호출한다
  • printf 내부에서 write system call을 호출한다
  • 호출되는 순간 kernel mode에서 write를 실행한다
  • printf는 write의 리턴값을 받는다

Types of System Calls

profile
2023.08.21~

0개의 댓글