운영체제 공룡책 CH 2. Operating-System Structures

박지윤·2022년 6월 29일
0

OS

목록 보기
1/7

2.1 Operating System Services

OS는 프로그램이 실행될 수 있는 환경을 제공해준다

OS가 제공하는 서비스들:

  • User Interface
  • Program execution
  • I/O operation
  • File-system manipulation
  • Communications
  • Error detection
  • Resource allocation
  • Loggig
  • Protection and security

2.2 User and Operating-System Interface

Three fundamental ways for users to interface with the OS:

  • CLI: command line interface, or command interpreter (명령어 기반으로 인터페이스 ex. ls 입력)
    known as shells: sh, bash, csh, tcsh, zsh, etc.

  • GUI: graphical user interface (ex. 마우스로 아이콘 클릭하는 것)
    Windows, Aqua for MacOS, KDE/GNOME for Linux, etc.

  • Touch-Screen Interface
    Android UI, iPhone UI, etc

2.3 System Calls

  • System calls provide an interface to the services made available by an operating-system.
    시스템콜은 컴퓨터 응용프로그램과 OS를 이어주는 인터페이스 역할을 한다
    OS가 제공하는 서비스들을 system call을 통해서 호출한다

  • API: Application Programming Interface
    API는 각 함수에 전달되는 파라미터들과 리턴 값을 포함하여 응용 프로그램 프로그래머가 사용할 수 있는 함수 집합을 지정한다
    OS의 API가 System Calls라고 이해하면 좋다

    위의 그림에서 read()을 사용한 프로그램은 unistd.h를 반드시 포함하여야 한다

system-call interface는 system call에 대한 링크 역할을 한다
API의 함수 호출을 가로채서(위의 그림에선 open()) OS에서의 필요한 system call을 호출한다
일반적으로 번호는 각 system call과 연결되어 있으며 system-call interface는 이 번호에 따라 인덱싱된 테이블(시스템 콜 테이블)을 유지한다
OS 커널에서 의도된 system call을 호출하고 system call의 상태를 반환한다

일일이 user mode와 kernel mode를 오가며 system call 하는 것을 직접 조작하는 것은 힘들고 위험하기 때문에 보통 표준 라이브러리를 사용한다
예시로 C 라이브러리는 printf()를 가로채서 OS에서의 필요한 system call을 호출하고, 이 경우에서는 write() system call 이므로,
C 라이브러리가 리턴 값을 write() 함수에 의해 얻어서 user 프로그램에 다시 전달한다

2.5 Linkers and Loaders

source code를 실행하기 위한 과정이다
source code는 compiler를 통해 object file로 변환되고 linker가 library와 object file을 executable file로 결합하면 loader가 메모리로 불러와 이를 실행할 수 있다

  • Dynamic linked libraries: 같은 라이브러리를 사용하는 file들은 불러온 라이브러리를 공유하여 사용할 수 있다 즉, 한 번만 로드하여 사용할 수 있다

2.8 Operating-System Structure

  • Monolithic Structure

    과거에는 사실상 계층이 구분되어 있지 않았다
    MS-DOS에서는 사용자 프로그램이 입출력 루틴에 접근해 디스플레이와 디스크 드라이브에 직접 쓰기를 할 수 있었다
    따라서 만약 사용자 프로그램에 문제가 생기면 전체 시스템에 문제가 생겼다

    UNIX 시스템이 이를 개선하여 MS-DOS에 비해 기능이 분리되었지만, 여전히 하나의 계층이 너무 많은 일을 했다
    커널이 모든 기능을 제공했다
    이러한 monolithic 구조는 구현과 유지보수가 쉽지 않았다
    하지만 성능면에서는 뚜렷한 이점이 있다
    시스템 콜 인터페이스는 오버헤드가 거의 없고, 커널 내부의 통신 속도가 빠르다
    이러한 장점 때문에 Linux, Windows는 여전히 monolithic 구조를 사용 중이다

  • Layered Approach

    OS를 더 세분화해 계층을 분리한 방식이다
    가장 아래에 있는 계층(layer 0)은 하드웨어이며 가장 위에 있는 계층(layer N)은 사용자 인터페이스이다
    임의의 m층은 자신의 하위층들의 서비스만 사용할 수 있다
    문제가 생겼을 경우 계층 별로 수정하면 되기 때문에 유지보수가 더 편하다
    하지만 layer를 정의(구분)하기 어렵고, 함수 호출 시 비효율적일 수 있다 (단계를 많이 거쳐야할 경우)

  • Microkernels

    마이크로커널은 커널에서 핵심적인 요소만 남긴 가벼운 커널을 말한다
    커널이 커질수록 문제가 생길 가능성이 높아지고, 유지보수가 힘들어지기 때문에 커널을 더 가볍게 만들 필요가 있었다

    ** 마이크로커널의 주요 기능
    interprocess communication
    memory management
    CPU scheduling

    ** 마이크로커널의 장점
    코드 양이 훨씬 적어 컴파일, 테스트 시간이 비교적 짧다
    다른 시스템에 이식하기 쉽다
    확장하기 쉽다
    보안성, 안정성이 높다

    ** 마이크로커널이 단점
    늘어난 오버헤드 때문에 성능에 영향이 있을 수 있다

  • Modules
    모듈은 커널을 확장하기 위한 기술로, OOP에서 말하는 그 모듈화와 같은 개념이다
    프로세스에 실시간으로 모듈을 붙여 작동시킬 수 있고, 각 기능들을 독립적으로 관리할 수 있어서 효과적으로 시스템을 유지할 수 있다
    장치 드라이버는 모두 모듈로 구현되어 있으며, 윈도우에서 .dll 파일이 바로 모듈이다

  • Hybrid Systems
    하이브리드 시스템은 커널의 핵심만 남기고 나머지는 따로 구현한 시스템이다

0개의 댓글