Ch.2 OS Structures

imagine·2025년 3월 13일

OS

목록 보기
3/6

Operating System Services

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

운영체제가 제공하는 서비스 및 기능

  • 사용자를 위한 서비스
    • UI
    • 프로그램 실행
    • 입출력 연산
    • 파일 시스템 조작
    • 통신
    • 오류감지
  • 시스템 자체의 효율적인 운영을 위한 기능
    • 자원할당
    • Logging
    • 보호 및 보안
  • UI
    • CLI (command line interface)
      • CLI를 사용하면 직접 명령을 입력할 수 있다
      • 어떨 때는 kernel(Linux)로, 때로는 시스템 프로그램(window cmd)으로 구현되어 있다.
      • terminal, cmd
    • GUI
      • 마우스로 프로그램 실행, 파일 여는 등의 조작
      • 마우스, 키보드, 모니터, 프로그램 아이콘
    • touch-screen interface
      • 제스처를 통해 제어, 가상 키보드와 음성인식 기능

System Calls

  • os에서 제공하는 서비스에 대한 인터페이스를 제공
    • interrupt를 통해 OS kernel에 대한 함수를 호출할 수 있다
    • kernel과 사용자 프로그램의 통신이 필요한 운영체제 서비스에 대한 인터페이스를 제공한다.
    • 일반적으로 interrupt handler로 제공된다
    • 하드웨어와 밀접한 경우가 대부분이기 때문에 일반적으로 C, C++로 구현되어 있다.
    • 권한이 낮은 모드에서 높은 모드(kernel)로 제어권을 안전하게 이전하는 메커니즘이다
    • 대부분 프로그램에서 직접 시스템을 호출하지 않고, high-level API로 접근한다
  • Dual-mode operation
    • User mode
      • 사용자가 정의한 코드
      • 권한이 필요한 명령은 OS system call을 통해서만 호출될 수 있다.
    • Kernel mode
      • OS code, System call → 권한이 필요한 명령이 허용된다.

System Call - OS Relationship

OS는 interrupt driven 프로그램이다

  • OS의 system call은 interrupt를 통해 비동기 이벤트를 처리한다.
  • system call이 이뤄지면, OS에 interrupt를 전송하여 user mode→kernel mode로 전환하라는 메시지를 표시한다.
  • 이를 통해 OS는 요청된 작업을 안전하고 효율적으로 수행하여 하드웨어와 리소스를 낮은 수준에서 관리한 후user mode process로 제어권(control)을 반환한다.
  • 이 모델(system call)을 사용하면 OS가 외부 및 내부 이벤트에 계속 반응하여 시스템 성능과 리소스 활용도를 최적화할 수 있다.

  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(e.g. vc, eclipse)에서 API func (open()) 함수를 실행한다. [user mode]

System Call Implementation (구현)

각 system call에는 숫자가 있다.

System-call interface : 그 숫자를 index한 table

  • OS 커널에서 의도한 시스템 호출을 호출하고 시스템 호출의 상태와 반환값을 반환합니다.

    • kernel로 정보 전달
    • kernel모드로 변경
  • System call vs. I/O functions

    • write() : OS에서 제공하는 것
    • printf() : C언어에서 정의된 표준 함수
    • fread() : read()를 사용해 구현됨

System Call Parameter Passing

  • OS에 parameter를 전달하는 데 사용되는 3가지 방법
    • parameter를 register에 전달 (간단한 정보)
    • parameter를 메모리내의 블록이나 테이블에 저장하고 블록 주소가 register에 저장되는 방법
    • parameter를 스택에 저장하는 방법

Types of System Calls

  • Process control (프로세스 제어)
    • 프로세스 생성 및 종료
    • // load 및 실행
    • // 속성 획득/설정
    • 시간 기다리기
    • 이벤트 기다리기/알림
    • 메모리 할당 및 해제
  • File Management (파일 관리)
    • 파일 생성 및 삭제
    • 파일 open, close
    • 파일 읽기, 쓰기, 위치 변경
    • 파일 속성 획득 및 설정
  • Device Management (장치 관리)
    • 장치 요청 및 해제
    • 장치 읽기, 쓰기, 위치변경
    • 장치 속성 획득 및 설정
    • 논리적으로 장치를 연결 또는 분리
  • Information maintenance (정보 유지)
    • 시간과 날짜의 설정 및 획득
    • 시스템 데이터 설정 및 획득
    • 프로세스, 파일, 장치 속성 설정 및 획득
  • Communications (통신)
    • 통신 연결 생성 및 삭제
    • 메시지가 host name이나 process name을 전달하는 경우 메세지 보내기/받기
    • 공유-메모리 모델 생성 및 메모리 영역에 대한 엑세스 획득
    • 전송 상태 정보
    • 원격 장치 연결 및 분리
  • Protection (보호)
    • 리소스에 대한 접근 제어
    • 권한 가져오기 및 설정
    • 사용자 접근 허용 및 거부

Why Applications are OS Specific

어플이 OS에 따라 달라지는 이유

: OS type에 따라 system calls도 다르기 때문이다

  • 한 OS에서 컴파일된 응용 프로그램은 다른 OS에서 실행할 수 없다
  • 앱은 다중OS 일 수 있다

System Programs

system program은 개발하고 실행하기에 편리한 환경을 제공한다.

system program들은 분할된다 :

  • file manipulation
  • 상태 정보
  • 프로그래밍 언어 지원
  • 프로그램 로딩 및 실행
  • 소통
  • 백그라운드 서비스
  • 어플 프로그램

사용자가 OS를 보는 시각은 실제 system call이 아니라 대부분 system program에 의해 정의된다.


Operating System Design and Implementation

OS 설계 및 구현

  • OS의 설계 및 구현은 “해결가능”하진 않지만 일부 접근 방식은 성공적이다
  • 각각의 OS 내부구조는 매우 다양하다
  • 하드웨어 선택, 시스템 유형에 따라 영향을 받는다
  • 사용자의 목표와 시스템의 목표
    • 사용자 : OS는 사용하기 편하고, 배우기 쉽고, 신뢰할 수 있고, 안전하고 빨라야 한다.
    • 시스템 : OS는 설계, 구현, 유지관리가 쉬워야 한다. 유연하고 안정적이며 오류가 없고, 효율적이여야 한다.
  • separate의 중요한 원칙 Policy : what will be done? Mechanism : How to do it?
    • 정책과 메커니즘의 분리는 매우 중요한 원칙으로, 정책이 나중에 변경될 경우 최대의 유연성을 허용한다. (ex. timer)
    • OS를 지정하고 설계하는 것은 소프트웨어 엔지니어링의 매우 창의적인 작업이다.

Implementation

  • 변동이 많다
    • 초기 OS는 어셈블리어 → Algol → C, C++
  • 실제로는 여러 언어들이 섞여있다
  • 고급언어일수록 다른 하드웨어로 쉽게 이식할 수 있다 → 그러나 느림

Operating System Structure

  • 일반적으로 OS는 매우 큰 프로그램이다
  • 하나를 구성하는데 다양한 방법이 있다
    1. Monolithic structure
    2. Layered approach
    3. Microkernel
    4. Modules
    5. Hybrid systems

1. Monolithic Structure (단조로운 구조)

  • 매우 단순해보인다.

(+) 뚜렷한 성능 이점 (속도 및 효율성)

(-) 확장이나 구현에 불편함

2. Layered Approach

  • 운영체제는 여러 계층으로 나뉘며, 각 계층은 하위 계층의 위에 위치된다.
    • 맨 아래 계층(layer 0)은 하드웨어
    • 가장 높은 계층(layer N)은 사용자 인터페이스
  • 각 계층은 하위 계층을 호출할 수 있다
    • level 1은 level 0 호출, level2에 호출당함

(+) 구성 및 디버깅이 단순하다

계층은 하위 계층의 세부 정보를 알 필요가 없다

(-) 계층적 접근의 어려움

여러 계층을 정의하려면 신중한 계획이 필요하다

하위 계층에 대한 호출을 반복함으로써 비효율적이다

3. Microkernel

  • smaller kernel
    • 중요한 것만 kernel에 남기고, 그 외의 것은 시스템/사용자 레벨 프로그램으로 구현하여 OS를 구성하는 방법
  • 프로세스/메모리 관리/통신 시설은 kernel에 있다
  • system call은 메세지 전달을 통해 제공된다
    • kernel은 client-server 사이의 메세지 전달 기능만 제공

(+) 마이크로커널 확장이 용이하다

(+) 새로운 architecture로 OS를 이식하는 것이 용이하다

(+) 더 안정적(kernel에서 실행되는 코드가 적음)

(+) 더 안전함

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

file system → device driver로 메세지 전달할 때 mode를 2번 스위치해야 함

4. Modules

  • 많은 현대 OS는 LKM(loadable kernel modules-로드 가능한 커널 모듈)을 구현한다
    • 객체지향 접근방식 사용
    • 핵심 구성 요소는 분리되어있다
    • 커널은 핵심 서비스를 제공하고, 다른 서비스는 커널이 실행될 때 동적으로 구현된다

(+) 핵심 서비스를 제공

특정 기능을 동적 구현 가능

  • 2,3번 방식과 비교
    • layered approach와 비슷하지만, 각각의 모듈로 구성되어 있고 모듈에서 임의의 다른 모듈을 호출할 수 있다는 점에서 오버헤드가 발생하지 않는다.
    • microkernel과도 유사하지만, 각각 모듈은 커널 모드에서 실행할 수 있다 → 통신하기 위해 메세지 전달을 할 필요가 없기 때문에 더 효율적이다.

5. Hybrid Systems

  • 대부분의 현대 운영체제는 하나의 구조만을 선택하지 않는다.
    • 다양한 접근 방식을 결합하여 성능, 보안 및 편리성 문제를 해결한다.
    • window ⇒ monolithic + microkernel …
    • MaxOS ⇒ hybrid + layered + Aqua UI + Cocoa ..

MacOS, iOS

  • User experience layer
    • 사용자가 컴퓨팅 장치와 상호작용할 수 있는 소프트웨어 인터페이스 제공
  • Application frameworks layer
    • Objective-C 및 Swift 언어에 대한 API 제공
  • Core frameworks
  • Kernel 환경 : Darwin (하이브리드 커널)
    • Darwin은 주로 Mach 마이크로커널과 BSD UNIX 커널로 구성된 계층화된 시스템이다

Android

업로드중..

  • Android 장치의 소프트웨어 설계자는 Java 언어로 응용 프로그램을 개발하지만 일반적으로 표준 Java API를 사용하지 않고 별도의 Android API를 사용한다.
  • Java 응용 프로그램은 Android RunTime(ART)에서 실행할 수 있는 형식으로 컴파일된다.

System Boot

  • Booting : kernel을 로드하여 컴퓨터를 시작하는 절차
  • 부트스트랩 프로그램 (부트스트랩 로더)
    • 진단 실행
    • 시스템 초기화
    • 커널 찾기, 로드, 시작
  • 시스템 전원이 초기화되면, 고정된 메모리 위치에서 실행 시작된다
  • OS는 OS를 시작할 수 있도록 하드웨어가 사용가능해야 한다.
    • 부트 블록
      • 전체 OS를 로더하거나
      • 부트 스트랩 프로그램의 남아있는 코드와 정보의 일부를 로더한다
  • 공통 부트스트랩 로더 GRUB를 사용하면 multiple disks, versions, kernel option로부터 커널을 선택할 수 있다.
  • 커널 로드와 시스템은 실행중이다.

(출처)
Operating System Concepts 도서
https://www.booksfree.org/operating-system-concepts-10th-edition-by-abraham-silberschatz-peter-b-galvin-greg-gagne-pdf/

profile
공부하는 기록

0개의 댓글