운영체제 CHAPTER2 - 시스템 구조

LYN L·2022년 8월 23일
0

Operating-System

목록 보기
1/5

CHATER2 미리보기

  • 운영체제가 제공하는 서비스와 System Call 이 무엇인가에 대해 알아본다.
  • 운영체제 설계 및 구현 시 고려해야 하는 점에 대해 알 수 있다.
  • 운영체제의 여러 구조들에 대해 알 수 있다.

2.1 운영체제 서비스 (Operating System Service)

  • 운영체제는 프로그램 실행 환경을 제공하며, 특정 서비스를 사용자에게 제공한다.

1. 사용자 인터페이스 (User Interface)

  1. CLI (Command Line Interface) : 문자열로 명령하는 인터페이스를 제공함
  2. Batch Interface : 디렉티브가 파일 형태로 입력되고, 파일을 통해 인터페이스를 제공함
  3. GUI (Graphical User Interface) : 가장 보편적. 그래픽 요소들을 통해 인터페이스를 제공함.

2. 프로그램 수행 (Program Execution)

  • System은 Program을 메모리에 load해서 실행할 수 있어야 한다.
  • 프로그램이 정상적이든, 비정상적이든 실행을 끝낼 수 있어야 한다.

3. 입출력 연산 (I/O operation)

  • 수행 중인 프로그램은 입출력을 요구할 수 있다.
  • 사용자는 보통 입출력 장치를 직접 제어할 수 없으므로, 운영체제가 입출력 수행의 수단을 제공해야 한다.

4. 파일 시스템 조작 (File System Manipulation)

  • 프로그램은 파일을 읽고 쓸 수 있어야 하며, 이름에 의해 파일 생성/ 삭제/ 검색 등을 할 수 있어야 한다.
  • 이에 많은 OS들은 다양한 specific feature와 performance feature를 제공하기 위해 다양한 파일 시스템을 제공한다.

5. 통신 (Communication)

  • 한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있는 상황이 많다.
  • 이러한 통신은 두 가지 방식에 의해 구현될 수 있다.
    • Shared Memory
    • Message Passing

6. 오류 탐지 (Error Detection)

  • 운영체제는 항상 모든 가능한 Error를 항상 의식하고 있어야 한다.
  • Error는 CPU, Memory Hardware, I/O 또는 user program에 의해 일어날 수 있다.

7. 자원 할당 (Resource Allocation)

  • 다수의 user가 존재하거나, 다수의 작업들이 동시에 수행될 때 resource를 적당히 할당해 주어야 한다.
  • 예를 들어, CPU를 최대한 효율적으로 운영하기 위해 운영체제는 CPU Scheduling Routine이 CPU의 속도, 사용 가능한 레지스터 수 등의 다양한 요인을 고려하여 자원을 할당한다.

8. 회계 (Accounting)

  • 사용자가 컴퓨터 자원을 어떻게, 얼마나 많이 사용하는지를 알 수 있게 해야 한다.

9. 보호(protection)와 보안(Security)

  • 보호(Protection) : 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 것.
  • 보안(Security) : 각 사용자가 자원에 대한 접근을 원할 때, 시스템에게 자기 자신을 인증하는 것에서부터 시작.

2.2 사용자 운영체제 인터페이스 (User OS Interface)

  • 명령 해석기 (Command-Interpreter)
    • 선택할 수 있는 명령어 해석기를 여러개 제공하는 시스템에서는 이 해석기를 "Shell"이라고 부른다.
    • 명령어 해석기의 중요한 기능은, 사용자가 지정한 명령을 가져와서 그것을 수행하는 것이다.
  • GUI (Graphical User Interface)
    • CLI 방식보다 사용자 친화적인 방식. 사용자는 마우스를 통해 아이콘을 클릭함으로써 프로그램을 수행할 수 있다.
    • 터치스크린 인터페이스도 있다.

2.3 시스템 호출 (System Call)

시스템 콜은 커널과 사용자 프로그램을 이어주는 인터페이스 역할을 한다. 조금 생소할 수 있지만, 그냥 로우 레벨 작업을 수행하는 코드라고 생각해도 좋을 것 같다.

  • 간단한 프로그램(파일 복사, 이동)의 경우도 많은 System Call 을 수행하게 된다.
  • 대부분 프로그래머들은 API (Application Programming Interface)를 통해서 System Call을 호출한다.
    • API 사용자들은 System Call이 어떻게 구현되고, 실행 중 무슨 작업을 하는 지 알지 못해도 되며, 단지 API를 준수하고 시스템 호출의 결과로서 운영체제가 무엇을 할 것인지 만을 파악하면 된다.
  • 운영체제에 매개 변수를 전달하는 방법
    1. Call by Value: 매개변수의 값 자체를 복사해서 CPU 레지스터에 전달한다.
    2. Call by Reference: 값의 메모리 주소를 전달한다. 많은 값을 전달할 때 효율적이다.
    3. 프로그램을 통해 스택(stack)에 매개변수를 추가하고, 운영체제를 통해 값을 뺀다. (매개변수 길이를 제한하지 않는 장점이 있음)

<추가 설명>
메모리의 특정 주소 범위에는 어떤 동작들이 할당되어 있다. 이것을 시스템 콜 테이블이라고 부르며, 인터럽트 벡터라고도 부른다. 예를 들어 fopen() 함수를 호출한다면, 운영체제는 파일을 여는 함수를 찾기 위해 시스템 콜 테이블을 참고한다.
시스템 콜 테이블은 메모리 주소의 모음이다.


2.4 시스템 호출의 유형 (Types of System Call)

  1. 프로세스 제어 : end abort load execute
  2. 파일 관리 : create delete open close read write
  3. 장치 관리 : read write request release
  4. 정보유지 : get/set time or date
  5. 통신 : send/receive messages transfer status
  6. 보호

2.5 시스템 프로그램 (System Programs)

  • 시스템 유틸리티 (System Utility), 프로그램 개발과 실행을 위해 보다 편리한 환경을 제공한다.
  • 파일관리, 상태 정보, 파일 변경, 프로그래밍 언어 지원, 프로그램 적재와 수행, 통신, 백그라운드 서비스의 범주로 분류할 수 있다.

2.6 운영체제 설계 및 구현

(1) 설계 목표

  • 사용자 목적과 시스템 목적 두 가지 기본 그룹으로 나눌 수 있다.
  • 사용자 입장에서 시스템은 사용하기에 convenient to use, easy to learn, Reliable, safe, fast 해야 한다.
  • 시스템 입장에서 운영체제는 설계, 구현, 유지보수가 쉬워야 하며, 적응성, 신뢰성, 효율성을 가져야 한다.

(2) 기법과 정책 (Mechanisms and Policies)

  • 기법(Mechanism)은 how to use something(어떻게 할 것인가)를 결정하는 것이다.
  • 정책(Policies)은 what will be done(무엇을 할 것인가)를 결정하는 것이다.

(3) 구현 (Implementation)

  • 초창기 운영체제는 어셈블리어로 작성 되었으며, 현재 대부분의 운영체제는 고급 언어로 작성된다.
  • 운영체제를 고급 언어로 작성할 때의 단점, 속도가 느리고 저장장치가 많이 소요된다는 것!
  • 하지만 고급언어를 통한 sophisticated optimization을 수행하고, 좋은 자료구조와 알고리즘을 사용함으로써 위의 문제를 해결하고 성능 향상을 이룰 수 있다.

2.7 운영체제 구조

Different approaches or Structures of Operating Systems

(1) 간단한 구조 Simple Structure

+-------------------------------------+
| application program                 |
+--+-------------------------------+--+
   |                               |
   v                               |
+------------------------------+   |
| resident system program      |   |
+--+------------------------+--+   |
   |                        |      |
   v                        |      |
+-----------------------+   |      |
| MS-DOS device drivers |   |      |
+--+--------------------+   |      |
   |                        |      |
   v                        v      v
+-------------------------------------+
| ROM BIOS device drivers             |
+-------------------------------------+
  • 과거에는 사실상 계층이 구분되어 있지 않았다. MS-DOS에서는 사용자 프로그램이 입출력 루틴에 접근하여 디스플레이와 디스크 드라이브에 직접 쓰기를 할 수 있었다. 따라서 만약 사용자 프로그램에 문제가 생기면 시스템 전체에 문제가 생겼다.

(2) 계층적 접근 Layered Approach

+-------------------------------+
| layer N: user interface       |
| +---------------------------+ |
| | ...                       | |
| | +-----------------------+ | |
| | | layer 1               | | |
| | | +-------------------+ | | |
| | | | layer 0: hardware | | | |
| | | +-------------------+ | | |
| | +-----------------------+ | |
| +---------------------------+ |
+-------------------------------+
  • 운영체제를 더 세분화 해 계층을 분리한 것이 계층적 접근 (layered approach)방법이다. 가장 아래에 있는 레이어0은 하드웨어고, 가장 높은 계층 layerN은 사용자 인터페이스다.
  • 이 방식은 유지보수가 아주 편한데, 하나의 계층에만 신경쓰면 다른 계층에는 아무런 신경을 쓰지 않아도 되기 때문이다.

(3) 마이크로커널 Microkernels

  • 커널에서 아주 핵심적인 요소만 남긴 가벼운 커널을 말한다.
    마이크로 커널은 코드 양이 훨씬 적어 컴파일, 테스트 시간이 비교적 짧고, 다른 시스템에 이식 (Porting) 하기도 쉽다. 다만 시스템 프로그램을 추가해 기능을 늘리려하면 속도가 느려진다.
  • 운영체제 확장이 용이하다.

(4) 모듈 Modules

  • 모듈은 커널을 확장하기 위한 기술로, OOP에서 말하는 그 모듈화와 같은 개념이다. 프로세스에서 실시간으로 모듈을 붙여 작동시킬 수 있고, 각 기능들을 독립적으로 관리할 수 있어 효과적으로 시스템을 유지할 수 있다.

(5) 혼용 시스템 Hybrid System

  • 스마트폰은 OS 구조의 최신판이라고 할 수 있다.
  • 하나의 구조만을 채택한 운영체제는 거의 존재하지 않으며, 보통 여러 구조를 결합한 혼용 구조로 구성된다.

2.8 운영체제 디버깅 (Operating-System Debugging)

  • 디버깅이란 하드웨어와 소프트웨어에서의 시스템 오류를 발견하고, 수정하는 행위이다.

(1) 장애 분석

  • 커널 장애는 crash라고 부른다. 해당 오류 정보는 로그 파일에 저장되고, 메모리의 상태가 crash dump 에 저장된다.

(2) 성능 조정

  • 병목 지점을 제거함으로써 성능을 향상시키려고 하는 것도 디버깅에 포함된다.
  • 이에 병목 지점을 발견하기 위해 시스템 성능을 감시할 수 있어야 하며, 시스템 동작을 측정하고 표시할 수 있는 방법을 가지고 있어야 한다.

2.9 운영체제 생성 (Operating-System Generation)

  • 운영체제는 다양한 주변 구성을 가진, 여러 부류의 기계에서 수행되도록 설계되는 것이 일반적이다.
  • 이 경우, 시스템은 각 specific computer site를 위해 구성되거나 생성되어야 한다.
  • 이 절차를 시스템 생성 (SYSGEN)이라고 한다.

2.10 시스템 부트 (System Boot)

  • 운영체제가 생성된 이후에는 하드웨어에 의해 사용 가능해야 한다.

  • 대부분의 컴퓨터 시스템에서는 Bootstrap Program이 커널을 찾은 뒤, Main memory에 Load하고 수행을 시작한다.

  • 컴퓨터가 전원을 켜거나 재부팅 등의 사건을 받으면 명령 레지스터는 미리 지정된 메모리 위치를 가리키고, 그곳에서부터 실행을 시작한다.

  • RAM은 시스템 시작 시에 알 수 없는 상태가 되기 때문에 Bootstrap Program은 ROM안에 저장된다.

  • Bootstrap Program은 먼저 기계의 상태를 진단하여 이상이 없는지 확인한다.

  • 이후 CPU Register, device Controller, Main memory 등 시스템 전반에 걸쳐 초기화한다.

  • 위의 작업이 끝나면 bootstrap program은 운영체제를 시작한다.


profile
steadily, off the wall

0개의 댓글