Chapter 2: Operating-System Structures

Operating System Services

Operating System

  • 하드웨어와 애플리케이션 소프트웨어 중간 매개체 역할을 하는 소프트웨어
  • kernel + 여러가지 service → 여러가지 sevice : protection, security
  • kernel의 역할
    1. Process 관리

      CPU에서 리소스 사용하면서 일 시키는 것

    2. Memory 관리

      코드, data, stack, heap 공간 관리

    3. I/O 관리

      I/O 요청 시 I/O 접근할 수 있게 하는 것

    4. Storage 관리

      비휘발성 저장 장치 제어하는 것

  • kernel 공간 + system 공간 + user 공간 명확하게 구분
  • 지원하는 기능
    1. Virtualization 가상화
    2. Concurrency 병렬화
    3. Persistency 지속성

Operating System Services

  • 실행 환경 제공
    • User Interface
    • Program execution
    • I/O operations
  • user를 위한 함수 제공
    • File-system manipulation
    • Communications : IPC (process 간의 통신)
    • Error detection
  • resource sharing을 통한 효율적은 operation 제공
    • Resource allocation
    • Accounting
    • Protection and Security

A View of OS

  • 각각의 역할, 모듈별로 기능들을 서비스할 수 있도록 만들어짐
  • system calls : 서비스 ↔ 유저 애플리케이션 매개체 역할 → OS API 제공

User and Operating-System Interface

OS User Interface

  • CLI
    • 대표적 CLI : shells
    • bash shells 창시자 : GNU 프로젝트
  • GUI
    • MS Windows, Applc Max OS X, Unix/Linux…
  • TSUI
    • Touchscreen user interface
    • 터치 패드 사용
  • Voice commands Interface
    • 자동차 : 터치보다는 말

→ user interface를 통해 process 실행

Programming Interface

  • API : Application Programming Interface
  • scanf → read system calls 매핑하여 실행
  • system call : user application에서 kernel에 접근하기 위한 장치

System Calls

System Call Implementation

  • System-call interface
    • system call 번호 인덱싱된 테이블 포함

    • OS kernel에서 system call 호출 → system call 상태 리턴

  • 사용자는 system call이 어떻게 구현됐는지 몰라도 됨

Relation between API and System Call on Linux

  • Interrupt
    • 소프트웨어 인터럽트 : kernel에게 알릴 때 (0x80)
    • 하드웨어 인터럽트 : 문제가 생겼을 때 (trap)
  • IDT(Interrupt Description Table)
    • 인터럽트들을 배열해놓은 테이블
    • kernel 내부에 정의
    • interrupt들마다 번호가 몇 번인지 정의
  • movl 2, %eax
    • 커널에 갔을 때 eax 값에 따른 동작
    • 2니까 sys_fork()
  • sys_call_table
    • 링크드리스트 형태로 실행할 코드를 포인팅
    • kernel 내부에 정의

Standard C Library Example

  • 대부분 systemcall 내부적으로 호출
  • 고급언어 작성 → (컴파일) → 어셈블리어 → 기계어(bit의 집합) → CPU가 실행
  • “ Stack/Heap/Data/Instruction “
  • PC값에 따라 Instruction이 BUS 타고 CPU 안에 들어간다. → 명령어가 어떤 의미를 가지는지는 CPU에 따라 정의됨.
  • CPU 레지스터
    • GPR 범용 레지스터 : eax, ebx, sp, pc
    • Segment 레지스터 : data segment, code segment
    • Flag 레지스터 : Zero flag, branch flag

Operating-System Structure

Kernel의 구조

  1. monolithic kernel

    • Non Simple Structure
    • ex. UNIX, maxOS, windows, ios
    • service들을 모두 통으로 연관되게
    • 장점 : 빠름, 효율적
    • 단점 : 하나의 service를 수정할 때 다른 것들에 영향을 미침 → 유지보수 어려움
  2. micro kernel

    • ex. mach
    • 커널에는 핵심만(process, memory, I/O resource) 남기기 → 나머지는 위로 올림
    • message passing을 통해 모듈 간 통신
    • 장점 : 유지보수, 기능 확장 good!
    • 단점 : kernel 공간 - user 공간 통신할 때 성능 저하
  3. module kernel

    • ex. Linux, Android, Solaris
    • 1, 2번 장점만 흡수
    • 한꺼번에 집어넣되 인터페이스 구분(모듈형) → kernel의 핵심 기능 넣고 빼고 할 수 있는 것
    • 장점
      • 시스템콜 오버헤드 X
      • kernel 내 통신 빠름 → 속도, 효율성
    • 단점
      • 막상 분리하니 커널의 성능이 떨어짐 → 사실상 1번 형태로 가는 중
      • 확장 어려움

구조의 역사

  • Simple Structure : MS-DOS
    • 가장 초기의 간단한 kernel
    • OS의 기능 거의 X
  • monolithic kernel
  • Layered Approach
    • 모듈화 → 각 계층은 바로 아래 계층에서 제공하는 기능만 사용
    • 장점
      • 유지 보수 용이 → 위 아래하고만 맞춰주면 됨.
      • 설계 구현 간단
    • 단점
      • 각 계층의 기능 정의 어려움 → 오직 하위 계층의 기능만 사용하기 때문
      • 순서대로 계층을 따라 기능이 수행되어야 함 → 비효율성 (성능 저하)
  • Microkernel System Structure
  • module kernel
  • Hybrid System
    • 장점 최대한 취합
    • Linux, Android(Module) + Windos,macOS(Monolithic)

OS 구조

  • UI - System call - kernel의 Services
  • UI (알고만 있기)
    • window : Explorer
    • macOS : Aqua
    • ios : springboard
    • Linux : KDE
    • GNU : GNOME
  • Services
    • Kernel Core, 핵심
    • OS마다 제각각
profile
숭실대학교 컴퓨터학부 21

0개의 댓글