본문 바로가기

OS

[OS][운영체제] 2. Operating-System Structures / OS의 구조

반응형
  1. OS 서비스
  2. User OS Interface
  3. System calls
  4. 시스템 프로그램
  5. OS 설계 및 시행
  6. OS의 구조
  7. Virtual Machines (가상 머신)
  8. OS Generation (SYSGEN)
  9. System Boot

1. OS 서비스

OS 서비스는 유저를 위해 다음과 같은 기능을 가진다

  • UI; User Interface
    • : CLI(Command-Line) ~ GUI(Graphics User Interface), Batch
  • 프로그램 실행
  • I/O 동작
  • 파일 시스템 조작
    • : read, write, create, delete, search, list, permission, …
  • 통신
    • : 같은 컴퓨터 혹은 다른 컴퓨터의 프로세스들은 네트워크로 통신한다
    • : OS에서 패킷 이동은 공유 메모리, 혹은 메시지 패싱(Message Passing) 방식을 이용한다
  • 에러 검출(detection)
    • : 디버깅 facilities는 에러를 수정 + 지속적인 컴퓨팅을 하게 해준다

자원 공유를 통한 효율적 동작을 위해 다음과 같은 기능을 가진다

  • 자원 할당
    • : Special allocation code(CPU cycles, 메인 메모리, 파일 저장소)
    • : General request and release code(I/O 장치)
    • : 가상 메모리와 파일 시스템 등
  • Accounting
    • : 누가 어느 자원을 얼마나 쓰는지 기록
  • 보호와 보안(Protection & Security)
    • : 여러 프로세스 사이에 보호를 제공한다 (프로세스는 장치에 직접 접근하지 못한다)

2. User OS 인터페이스

CLI

직접적으로 명령을 Fetch하고 Execute 한다.

KernelBuilt-in하여 명령한다.

명령 셀로 구현이 되기도 한다.

GUI

마우스, 키보드, 모니터, 아이콘 같은 것들.

 

현재는 CLI와 GUI 인터페이스 둘 다 포함한다

  • Windows: GUI with CLI(Command Shell)
  • Mac: GUI with UNIX kernel underneath & shells
  • Solaris: CLI with optional GUI

3. System calls

OS가 제공한 서비스로의 프로그래밍 인터페이스이다.

보통 (CC++) high-level 언어로 쓰였고,

high-level API(Application Program Interface)를 통해 접근한다 (-> 사용이 쉽고 효율적임)

  • ex) Win32 API, POSIX API, Java API

실행

시스템 콜 인터페이스는 OS kernel에 보내고 상태나 값을 return 한다.

시스템 콜을 한 유저는 OS 인터페이스를 알지 못하고 시스템 콜의 결과만 안다. (API 안에 숨긴다)

  • ex) C library에서 시스템 콜을 불러 리턴 값을 받아온다.
  • ex) User application에서 open() trap을 불러 시스템 콜을 부르고 리턴 값을 받아온다.

[사진 1] 시스템 콜

- 시스템 콜이 변수를 전달하는 유형에는 다음 세 가지가 있다.

  • 레지스터에 변수를 저장
  • 메모리에 블록(block)으로 저장해 주소 값을 레지스터에 저장
  • 스택에 저장

- 각 시스템 콜의 타입과 정보를 나타내는 indexTable에 있다.

  • ex) 레지스터 X에 시스템 콜 13의 주소값을 로드한다

[사진 2] Table을 통한 Parameter Passing

- 시스템 콜의 유형은 다음과 같다

 

[사진 3] 시스템 콜의 유형


4. 시스템 프로그램

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

대부분의 유저는 시스템 프로그램으로 정의된 OS를 보게 된다.

이들의 유형은 다음과 같다

  • 파일 관리
  • 상태 정보
    • : 날짜, 시간, 디스크 공간, …
    • : OutputTerminal이나 디바이스레 포맷하고 출력한다
    • : 설정 정보를 레지스터에 저장하고 복원한다
  • 프로그래밍 언어 지원
    • : 컴파일러(한 덩어리씩), 어셈블러, 디버거, 인터프리터(한 줄씩)
  • 프로그램 적제(loading)과 실행
    • : Absolute loaders, relocatable loader, linkage editor, overlay-loaders(필요 없는 메모리에 겹쳐 로딩함), debugging systems, …
  • 통신
    • : 프로세스, 유저, 시스템 사이 가상 연결을 만드는 방법

5. OS 설계 및 시행

편리성, 용이함, 안전, 속도 등을 생각하는 User goals

디자인, 시행, 유지의 용이함, 에러, 효율성 등을 생각하는 System goals가 맞아야 한다.

 

이는 어떤 것을 할 것인지의 Policy와 어떻게 할 것인지의 Mechanism을 분리시켜 생각하게 된다.


6. OS 구조

MS-DOS

다음과 같이 메모리가 적어 Layer 분리 없이 곧바로 하드웨어에 접근한다

 

[사진 4] MS-DOS

 

Layered Approach

모듈화가 이루어지면서, 다음과 같이 Layers가 나눠지게 된다.

 

[사진 5] Layered Approach

 

UNIX

하드웨어의 기능성이 제한되면서, 구조에 제한이 생긴다.

그래서 UNIS OS는 시스템 프로그램 / Kernel 을 나눌 수 있게 된다.

결과적으로 Kernel level에서 많은 기능이 몰리게 되고,

단적으로 kernel을 확장할 때 다른 쪽에 영향을 문제가 생길 수 있다.

 

[사진 6] UNIX

 

Microkernel System Structure (UNIX)

User Space을 만들어 사용한다

Message Passing 방식(<-> shared memory)으로 통신한다

이는 다음과 같은 장점이 있다

  • microkernel의 확장성
  • OS를 새 architecturesport하기 쉬움
  • kernel의 경량화
  • 안정성

반대로, 메시지 패싱이 늘어나면 성능에 오버헤드가 생긴다는 단점도 있다.

 

[사진 7] Microkernel System

 

Modules

현대 OSkernel 모듈을 시행한다

-> 객체 지향 접근

-> core 요소들이 분리되어 있음

-> Message Passing over known 인터페이스

-> kernel에서 필요할 때 Loadable

 

이는 좀 더 flexible한 Layers 구조라고 할 수 있다.

외부 모듈에 잘 노출되지 않는(narrow) 인터페이스를 통해 상호 작용하는 커널 접근 방식은 유사하다.

하지만, Layers 구조처럼 하위 시스템이 상위 시스템의 작업을 호출할 수 없도록

엄격하게 ordering 하지 않는다.


7. 가상 머신(Virtual Machines)

가상 머신은 하드웨어와 OS kernel을 모두 하드웨어처럼 취급해 계층화된 접근을 한다.

이는 기본 하드웨어 층과 같은 인터페이스를 제공한다.

OSmultiple processes와 같이 만들고, 각 자신의 가상 메모리와 프로세서를 가진다.

컴퓨터의 자원을 가상 머신을 만드는 데 나눈다.

 

각 가상 머신은 서로 분리되어 자원을 공유하지 않는다. (protection)

가상 머신은 OS 연구와 개발을 위한 완벽한 수단이다. 이는 시스템 동작에 지장을 주지 않고 이 환경에서 시스템을 개발할 수 있다.

디버그 하기 쉽고, 보안 문제 해결이 용이해지게 되었다.

 

[사진 8] 가상 머신

- VMware: 호스트 OS <-> 게스트 OS(호스트에서 제공된 기능에 매핑하여 서비스를 제공)

- JAVA VM


8. OS Generation; SYSGEN

SYSGEN 프로그램은 하드웨어 시스템의 특정 설정을 고려한 정보가 포함된다.

 

- Booting: kernelloading하여 컴퓨터를 실행한다

- Bootstrap 프로그램: 코드가 ROM에 저장(-> kernel에 위치, 메모리에서 로드, 실행 가능)


9. System Boot

OS는 하드웨어가 시작할 수 있게 해야 한다.

  • 적은 코드: bootstrap loader / kernel에 위치하여 메모리에서 로드하고 실행
  • Two-step 프로세스: 특정 위치의 Boot Blockbootstrap loader를 로드
  • Firmware(ROM같은 역할)가 초기 boot 코드를 가진다
반응형