운영체제 구조

삼식이·2022년 9월 27일
1

운영체제

목록 보기
1/8

본 자료 정리는 'Operating System Concepts'(Tenth Edition) - Abraham Silberschatz 원서에 출처합니다.
Copyright © 2020 John Wiley & Sons, Inc.

Chapter 2: Operating-System Structures

  • Operating System Services
  • User and Operating System Interface
  • System Calls
  • System Services
  • Linkers and Loaders
  • Why Applications Are Operating System Specific
  • Operating System Structure

Objectives (목표)

  • 운영체제에서 제공하는 서비스 식별
  • System call을 사용하여 운영체제 서비스를 제공하는 방법을 설명
  • 운영 체제 설계를 위한 monolithic, layered, microkernel, modular 및 하이브리드 전략을 비교 및 대조

Operating System Services

  • 운영 체제는 프로그램 및 사용자가 사용할 수 있는 특정 서비스 및 프로그램 실행을 위한 환경을 제공한다.

  • 사용자 인터페이스(UI)

    • GUI(Graphics User Interface), touch-screen interface, CLI(Command-LIne interface)
  • 프로그램 실행, 입출력 연산, 파일 시스템 관리, 통신, 오류 감지

  • 자원할당, 기록, 보호&보안 (각 프로그램이 자원을 얼마나 사용하는지 추적하여 기록-자원 할당에 활용하기 위함)

User and Operating-System Interface

  • CLI or Command Interpreters

    • 사용자로부터 명령을 받고 실행
    • (e.g. 맥 -> terminal, 윈도우 -> cmd)
  • GUI (그래픽 기반 사용자 인터페이스)

    • 마우스로 프로그램을 실행하거나 파일을 여는 등의 조작을 할 수 있다.
    • (e.g. 마우스, 키보드, 모니터, 프로그램 아이콘)
  • 터치스크린

    • 제스처를 통해 제어하는 것이 특징이며 가상 키보드와 음성인식 기능을 갖추고 있다.

System Calls

  • System call은 사용자 인터페이스와 운영체제 서비스 사이에서 사용자의 요청을 주고받도록 한다.
  • 커널과 사용자 프로그램의 통신이 필요한 운영체제 서비스에 대한 인터페이스를 제공한다.
  • 하드웨어와 밀접한 경우가 대부분이기 때문에 일반적으로 C, C++로 구현되어 있다.

  • 간단한 프로그램 (파일 복사, 이동)의 경우도 많은 System Call을 수행한다.

    • e.g. 사용자 프로그램이 디스크에 있는 파일 시스템을 열 때, 파일 시스템에 접근한다. 이를 위해 kernel mode로 변경되어야하고 바로 이때 시스템 콜이 사용된다.
    • 사용자에게 입력을 요청하고 입력된 정보를 가져오고 그것을 파일에 작성하는 모든 과정에서 시스템 콜이 사용된다.

System Call Implementation

  • API(Application Programming Interface)는 애플리케이션 프로그래머를 대신하여 실제 시스템 호출을 호출한다.

  • 대부분의 어플리케이션 개발자들은 API에 따라 프로그램을 설계하며 API는 각 함수에 전달되어야할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 포함하여 어플리케이션 프로그래머가 사용 가능한 함수의 집합을 명시한다.

    • (e.g. 언어에서 제공해주는 내장함수를 system call을 통해 사용)
  • 가장 흔한 API (Windows API, POSIX API, Java API)

  • 시스템 콜을 위한 API 세부정보 - parameter(파일 정보, 파일 저장 버퍼 읽는 사이즈)

System Call Implementation 2

  • RTE(Run-time environment)는 운영체제가 제공하는 시스템 콜에 대한 연결고리 역할을 하는 시스템 콜 인터페이스를 제공한다.

    • (e.g. RTE - vsc, eclipse..)
  • (* System call interface: 사용자가 프로그램을 실행할 때 api 실행을 위해 운영체제의 system call 과 연결해준다.)

API - System Call - OS Relationship

  1. 프로그래머가 API func (e.g. open())을 실행한다. [user mode]

  2. ** System call interface에서는 각 시스템 호출과 관련된 일련번호가 저장되어 있는 테이블을 관리한다. [kernel mode]

  3. System call interface는 open() 함수가 저장되어 있는 system call number를 찾아 테이블에서 그 값을 가져와 system call을 호출 후 결과 값을 반환한다. [kernel mode]

  4. RTE에서 API func (open()) 함수를 실행한다. [user mode]

  • 프로그램을 통해 스택에 매개변수를 추가하고 운영체제를 통해 값을 뺀다.

프로그래머는 시스템 콜이 어떻게 구현되고 실행 중 무슨 작업을 하는지 아무것도 알 필요가 없다. 단지 API를 준수하고 사용법을 익히며 시스템 콜의 결과로써 운영체제가 무엇을 할 것인지만 알면 된다

System Call Parameter Passing

  • 대부분의 경우, 원하는 system call을 단순히 식별하는 것보다 더 많은 정보가 필요하다. (e.g. 정확한 정보의 종류, 양)

  • OS에 매개변수를 전달하는 데 사용되는 3가지 일반적인 방법

    • 매개변수를 레지스터에 전달 -> 가장 간단한 방법이지만 파라매터의 수가 많아질 경우 (레지스터보다 파라매터가 더 많은 경우)에는 문제가 발생한다.
  • 매개변수를 메모리내의 블록이나 테이블에 저장하고 블록 주소가 레지스터 내에 저장되는 방법

  • 매개변수를 블록이나 스택에 저장하는 방법

    • 위의 두 가지 방법은 매개변수의 개수를 제한하지 않는다.

Parameter Passing via Table

테이블을 통해 매개변수를 전달하는 방법

  1. 사용자 프로그램에서 호출할 파라미터의 번지수 X를 찾는다.
  2. X를 cpu 레지스터 내에 저장하고 그 값을 OS에 전달한다.
  3. OS에서는 전달받은 값을 이용해 해당 시스템 콜에 맞는 code를 실행한다.

Types of System Calls

  • Process control (프로세스 제어)

    • 프로세스 생성 및 종료
    • 프로세스 load, 프로세스 실행
    • 프로세스 속성 획득, 프로세스 속성 설정
    • 시간 기다리기
    • 이벤트 기다리기, 이벤트 알림
    • 메모리 할당 및 해제
  • File Management (파일 관리)

    • 파일 생성 및 삭제
    • 파일 open, close
    • 파일 읽기, 쓰기, 위치 변경
    • 파일 속성 획득 및 설정
  • Device Management (장치 관리)

    • 장치 요청 및 해제
    • 장치 읽기, 쓰기, 위치변경
    • 장치 속성 획득 및 설정
    • 논리적으로 장치를 연결 또는 분리
  • Information maintenance (정보 유지)

    • 시간과 날짜의 설정 및 획득
    • 시스템 데이터 설정 및 획득
    • 프로세스, 파일, 장치 속성 설정 및 획득
  • Communications (통신)
    - 통신 연결 생성, 삭제

    • 메세지가 호스트 이름 또는 프로세스 이름으로 모델을 전달하는 경우 메세지 보내기, 받기

      • (e.g. From client to server)
    • 공유 메모리 모델 생성 및 메모리 영역에 대한 엑세스 획득

    • 전송 상태 정보

    • 원격 장치 연결 및 분리

  • Protection (보호)
    - 리소스에 대한 엑세스 제어

    • 권한 가져오기 및 설정
    • 사용자 엑세스 허용 및 거부

Examples of Windows and Unix System Calls

Standard C Library Example

  • C 프로그램이 prinf() 라이브러리를 호출하고, 해당 라이브러리는 write() 시스템 콜을 호출한다.

System Services

  • System service(=system utilities)는 프로그램 개발 및 실행을 위한 편리한 환경을 제공한다.

    • 파일 관리: (e.g. 파일 및 디렉토리 생성, 삭제, 복사, 이름 변경. 인쇄..)

    • 상태 정보: (e.g. 날짜, 시간, 사용 가능한 메모리 양,디스크 공간, 사용자 수, 성능, 디버깅 정보 제공)

    • 파일 수정: (e.g. 파일 생성 및 수정을 위한 텍스트 편집기)

    • 프로그래밍 언어 지원: (e.g. 컴파일러, 어셈블러, 디버거 및 인터프리터)

    • 프로그램 로딩 및 실행: (e.g. absoulute loaders, linkage editors, overlay-loaders, 상위 레벨 및 기계어 용 디버깅 시스템)

    • 통신: 프로세스, 사용자 및 컴퓨터 시스템 간의 가상 연결을 생성하기 위한 메커니즘 제공 (e.g. 사용자가 서로에게 메시지를 보내고, 웹 페이지를 탐색하고, 전자 메일 메시지를 보내고, 원격으로 로그인하고, 한 시스템에서 다른 시스템으로 파일을 전송하도록 허용)

    • 백그라운드 서비스: 부팅 시 시작 (e.g. 디스크 검사, 프로세스 스케줄링, 오류 로깅, 인쇄와 같은 기능 제공 [kernel context에서 실행])

      • Known as services, subsystems, daemons
    • 응용 프로그램

Linkers and Loaders

  • 고급언어로 작성된 소스 파일을 컴파일하면 기계어로 작성된 오브젝트 파일로 변환되는데 이를 재배치 가능 오브젝트 파일(relocatable object files) 이라고 한다.

  • Linker(링커)는 재배치 가능한 개체 파일을 단일 바이너리 실행 파일로 결합한다. 즉, 각각의 source 파일들을 묶어 하나의 실행가능한 file로 만든다. (e.g. C언어 컴파일 과정)

  • Loader(로더)는 바이너리 실행파일을 메모리에 로드하여 CPU 코어에서 실행한다.

  • reloacation(재배치, linking+loading)는 프로그램 부분에 최종 주소를 할당하고 해당 주소와 일치하도록 프로그램의 코드와 데이터를 조정한다.

  • 실제 시스템 대부분에서는 프로그램이 적재될 때 라이브러리를 동적으로 링크할 수 있는 기능을 지원한다.

The role of the Linker and Loader

Why Applications are OS Specific

__ 어플리케이션이 OS에 따라 달라지는 이유

한 OS에서 컴파일된 응용 프로그램은 다른 운영 체제에서 실행할 수 없다.

(e.g. iOS에서 사용 가능한 한 세트의 API를 호출하도록 설계된 앱은 해당 API를 제공하지 않는 Android에서 작동하지 않는다.)

  • 응용 프로그램이 운영체제마다 다른 이유

    • OS는 header, command 및 변수 등의 배치를 강제하는 형식이 있다. 즉, 이러한 component는 반드시 특정 위치에 존재해야 하는데 이것이 OS마다 다를 수 있다.

    • CPU는 다양한 명령어 집합을 가지며 해당 명령어가 포함된 응용 프로그램만 올바르게 실행시킬 수 있다.

    • OS마다 같은 기능을 하는 system call이라 하더라도 이름, 매개변수 의미 등이 다를 수 있다.

      • 파일 생성, 네트워크 연결 등 필수적인 기능은 모두 system call에 의존한다.

Operating System Structure

  • Monolithic Structure
  • Layered Approach
  • Microkernels
  • Modules
  • Hybrid Systems

Monolithic Structure

  • 구조가 없는 OS를 구성하는 가장 간단한 구조이다.
  • 커널의 모든 기능은 단일 주소 공간에서 실행되는 단일 정적 바이너리 파일에 배치된다.

(-) 확장이나 구현에 불편함
(+) 뚜렷한 성능 이점 (속도 및 효율성)
-- (system-call interface에서 매우 적은 오버헤드, 커널 내에서 소통이 빠르다.)

Traditional UNIX System Structure

  • 원래의 UNIX 운영 체제는 커널과 시스템 프로그램의 두 부분으로 구성된다.

Linux System Structure

(유닉스에서 파생됨)

Layered Approach

  • 운영체제는 여러 계층(레벨)으로 나뉘며, 각 계층은 하위 계층위에 구축된다. 맨 아래 계층 (layer 0)은 하드웨어이고, 가장 높은 계층 (layer N)은 사용자 인터페이스이다.

(+) 한 구성요소의 변경은 해당 구성요소에만 영향을 미친다.
(+) 계층이 나눠져 있으니 구성 및 디버깅이 단순하다.
(-) OS 서비스를 얻기 위해 사용자 프로그램이 여러 계층을 통과해야 하는 오버헤드로 인해 전반적인 성능이 저하된다.

Microkernels

  • Microkernel(마이크로커널)은 중요한 것들만 커널에 남기고 그 외의 것들은 별도의 사용자 레벨 프로그램으로 구현하여 운영체제를 구성하는 방법이다. (e.g. Mach 운영체제 - MacOS, iOS의 Darwin 커널은 부분적으로 Mach를 기반으로 한다.)

  • 마이크로커널의 주 기능은 클라이언트 프로그램과 사용자 공간에서 수행되는 다양한 서비스 간에 통신을 제공하는 것이다. 통신은 메시지 전달에 의해 제공된다.

(+) 마이크로커널 확장 용이
(+) 새로운 아키텍처로의 운영 체제 이식 용이
(+) 더 안정적(커널 모드에서 실행되는 코드가 적음)
(+) 더 안전함

(-) 커널 공간 통신에 대한 사용자 공간의 성능 오버헤드가 크다.

Modules

  • 많은 최신 운영 체제는 로드 가능한 커널 모듈(LKM, loadable kernel modules)을 구현한다.

  • LKM에서 커널은 핵심적인 구성요소의 집합을 가지고 있고 부팅 또는 실행 중에 동적으로 부가적인 서비스들을 모듈을 통하여 실행하도록 한다.

  • 커널은 핵심 서비스를 제공하고 다른 서비스는 커널이 실행될 때 동적으로 구현된다.

  • 계층적 접근 (Layered Approach)과 유사하지만 각각의 모듈로 구성되어 있고 모듈에서 임의의 다른 모듈을 호출할 수 있다는 점에서 오버헤드가 발생하지 않는다.

  • 마이크로 커널과도 유사하지만 통신하기 위해 메시지 전달을 할 필요가 없기 때문에 더 효율적이다.

Hybrid Systems

  • 대부분의 현대 운영체제는 하나의 구조만을 선택하지 않는다. 다양한 접근 방법을 결합하여 성능, 보안 및 편리성 문제를 해결하려는 혼용구조로 구성된다.

    • Linux: 효율적인 성능을 위해 monolithic이며 새로운 기능을 동적으로 추가가휘 위해 modular 식이다.
    • Windows: 대부분 monolithic이며 별도의 하위 시스템(특성)을 지원하는 microkernel(마이크로 커널)과 동적으로 로드할 수 있는 커널 모듈(loadable kernel module)을 지원한다.

Architecture of macOS and iOS

다양한 계층

  • macOS, iOS: Darwin이라고 불리는 하이브리드 커널 환경을 사용.

    • Darwin은 주로 Mach 마이크로커널과 BSD UNIX 커널로 구성된 계층화된 시스템이다.
    • Mach는 메모리 관리, CPU 스케줄링 및 메시지 전달 및 원격 프로시저 호출과 같은 프로세스간 통신 기능을 포함한 기본 운영체제 서비스를 제공한다.

Architecture of Google's Android

  • Android 장치의 소프트웨어 설계자는 Java 언어로 응용 프로그램을 개발하지만 일반적으로 표준 Java API를 사용하지 않고 별도의 Android API를 사용한다.

  • Java 응용 프로그램은 Android RunTime(ART)에서 실행할 수 있는 형식으로 컴파일된다.

수정해야될 사항이 있거나 잘못 번역된 문장이 있을경우 댓글로 알려주세요 :)

profile
I want to be coool and chilll developer...

1개의 댓글

comment-user-thumbnail
2023년 10월 25일

운영체제 시험 12시간 전 최고의 선택

답글 달기