[OS] System Structure

김수환·2023년 4월 10일
0

Operating Systems

목록 보기
2/2

💻 Operating System Services

For user

UI (User Interface)

  • command-line interface (CLI)
    Shell
    • OS에 의해 실행되는 명령에 직접적으로 접근 가능
    • Bin안의 실행 파일을 shell이 찾아서 수행
  • Batch Interface
    커맨드가 파일에 저장되고 해당 파일이 실행되는 구조
  • GUI (Graphic UI)
    Window, Unix, macOS 등 우리가 사용하는 OS

Program execution

  • 로딩과 실행

I/O 연산

  • file 과 I/O device에 접근할 방법 제공

File System Manipulation

  • file과 directory 읽고 쓰기
  • file 생성, 삭제, 검색 등
  • 파일 정보 나열, 접근 권한 관리

Communication

  • 프로세스간의 정보교환
  • 메모리와 message passing 공유

Error Detection

  • 각 error에 대해 OS는 일관성 보장을 위해 적절한 처리를 함

For efficiency

Resource 할당

  • 여러 resource(cpu, memory, file storage, I/O device)를 여러 job(processes)에 할당 해줌

Accouting

  • 어떤 user가 어떤 resource를 얼마나 사용하는지 계산
  • 통계자료를 만들어줌

Protection

  • 시스템 resource로의 접근이 관리되고 보호되는 것을 보장해줌

Security

  • 외부에서는 user의 인증이 필요 외부의 I/O device에 유효하지 않은 접근으로 부터 보호

💻 System call

Kernel mode로 들어가기

  • HW Interrupt
  • Trap
    • Exception
    • System Call( 중요 )

System Call

응용프로그램이 OS에 서비스를 요청하는 메커니즘
(엄밀히 따지면 Library 함수)

  • 대표적으로 read, write, fork, exit 등이 있음
    -> os에게 service요청
  • 라이브러리를 중간역할로 사용
    라이브러리는 User level에, System Call은 Kernel에 있음
  • 라이브러리 사용
    • 실제 함수를 직접 호출하지 않아도 됨
    • 어떤 OS에서도 사용가능 -> 프로그래밍이 쉬움
    • 동일한 API로 호출이 가능하다.
    • [Example]
      POSIX Standard API (UNIX-like System)
      POSIX API : malloc
      실제 System Call로 호출되는 함수 sbrk()
    • Unix like os -> POSIX -> read (library에서) -> sys_read -> System call

System Call Interface (Table 형태)

System Call을 제공해주는 table

수천개의 System call : numbering을 통해 효율적으로 관리

  • 각 System Call 에 numbering되어 있음
  • User -> 레지스터를 통해 숫자를 넘겨줌
  • Kernel table에서 찾아서 실행

  • user mode와 kernel mode를 원활히 사용하기 위해 register사용
  • (in Linux) 함수 parameter 6개까지는 레지스터 할당
  • system call interface level에 존재하는 register
  • 	1. 응용프로그램에서 library를 통해 open()
    	2. system call interface(table)에서 number 찾아서 open()(sys_read) 실행
  • parameter가 6개 초과하면 메모리 특정위치(Block)에 할당
  • Block의 주소를 register에 parameter로 전달

System Call 과정

  1. user가 fork() (POSIX 함수) 호출
  2. 라이브러리에서 fork() 찾음
  3. 레지스터에 SystemCall number : 2 넘김
  4. 0x80(128)번 (System Call)넘김 (software Interrupt 발생)
  5. IDT(Interrupt Descripter Table)에서 128번(System_call())에 해당하는 Interrupt 찾아 발생시킴
  6. Context 저장(다시 돌아와야지)
  7. Sys_call_table 에서 2번 함수(Sys_fork()) 찾아서 실행

System Program

프로그램 개발과 실행에 편리한 환경을 제공

  • 파일 관리
  • 상태 정보
  • 파일 수정
  • 프로그래밍 언어 지원
  • 프로그램 로딩과 실행
  • 통신

System Call의 종류

여러 종류의 System Call이 있음

Kernel이 H/W, I/O device, File 등 여러 resource 제어 (System Call 로)

  • Process 관리, 제어

    	end, abort, create, terminate, wait event, 등
  • 파일 관리

    	create, open, read, write, 등
  • 기기 관리

    	read, write, get device attributes
  • 정보 유지

    	get time, date, process id, 등
  • 통신

    	create, delete 통신 연결, send or receive messages

💻 OS design & Implementation

  • 응용프로그램의 종류에 관계없이 general purpose로 설계 해야한다.

Micro Kernel

최소한의 기능만을 제공하고 나머지는 user level의 프로세스로 구현
보편적인 interface만 제공

  • 프로세스 관리 : 프로세스 생성, 제거, 스케줄링, 동기화
  • 메모리 관리 : 메모리 관리, 페이지 교체
  • file system, device driver -> user level에 존재

💻 Operating System Structure

  • Simple structure
  • Layered approach
  • Micro Kernel
  • Module
  • Virtual machine

대부분의 OS는 Layered approach 와 Module을 조합하여 사용한다.

Simple structure

  • H/W protection이 없고, Dual mode가 아니다.
  • Interface와 함수 level이 구분되어 있지 않다.
  • ex. MS-DOS
  • 응용프로그램은 I/O device와 H/W에 직접적으로 접근한다.

Layered approach

OS를 여러 층으로 계층화 한다.

  • 하위 layer(HW)부터 상위 layer(user)로 구성한다.
  • 하위 layer가 완벽히 구현되었다고 가정하고, 하위 layer에서 제공 되는 opration만을 이용하여 구현한다.
  • 하위 layer에서 제공되는 interface를 통해 상위 layer가 접근한다.
    하위 layer에서는 상위 layer로의 접근이 불가하다.
  • 이렇게 하면 현재 layer만 고려하면 되어 구현과 debug가 간단해진다.
  • UNIX System architecture
  • 반면 MicroKernel은 OS와 응용프로그램이 한꺼번에 컴파일 됨.

MicroKernel

Kernel에는 아래 기능만 있음

  • Process Scheduling
  • Memory allocation

Device driver, File system task 등 나머지는 user level에 존재

  • microkernel은 확장하기에 용이함
  • 새로운 구조로 이식하기에도 용이
  • kernel이 망가질 우려도 매우 낮음
  • ∵ 대부분이 user level에 있기 때문에 communication의 overload가 크다.
  • Example. MachOS, QnX

Modules

각 component는 기능별로 분리 되어 있음.
각각은 kernel이 원할 때, loadable
덕분에 어떤 부분을 수정했다고 해서 OS를 재 로딩 하지 않아도 됨

  • 각각의 모듈은 동적(Dynamic, run time)으로 커널이 실행중에 추가, 삭제 가능 하다.

  • insmod
    module을 kernel에 삽입

    • insmod driver.o
  • rmmod
    module을 kernel에서 제거

    • rmmod driver

Virtual machine

  • virtual box

하나의 기계에서 여러 OS를 동시에 실행 하기위한 방식
Host OS 위에서 Guest OS동작

Host OS 입장에서는 Guest OS는 다 프로세스임

💻 System Boot

Bootstrap Loader

  • 부팅될 때 무조건 수행하는 프로그램
  • 커널에게 제어권 넘김
    -> 커널을 메모리로 로드, 첫줄이 실행되도록
  • 부팅 과정
    1. H/W 초기화
    2. kernel 로딩
    3. kernel 이 main 문 실행
  • ROM에 Bootstrap loader 넣어!
    다 못넣으면 일부를 boot block에 넣고 그거를 kernel mode에서 실행

profile
hello human

0개의 댓글