OS 세미나를 하면서 작성했던 자료를 정리했다. 세미나 서적은 Operating System Concepts(6/E) 이다.
목차는 다음과 같다.

  1. Introduction
  2. System Structures
  3. Process Concept

System Structures

각 디바이스 장치들은 시스템 버스를 통해 연결되어 있다.

H/W 인터럽트
S/W 시스템 호출(시스템 콜)

현재 작업중이던 프로세스 중단 → 중단될 때의 상태 저장 → 인터럽트 테이블에서 인터럽트를 유발한 장치 검색 → 인터럽트 루틴 수행 → 완료 후에 전에 작업중이던 프로세스 수행

용어 설명
trap(트랩) 오류 혹은 사용자 프로그램의 운영체제 서비스 수행 요청에 의해 유발되는 소프트웨어에 의해 생성된 인터럽트(0으로 나누기, 잘못된 메모리접근)
동기 입출력 프로세스 수행 동작 중에 입/출력이 발생하면 시작부터 끝날때까지 프로그램은 더이상 수행되지 못한다. 끝이 나면 그후에 제어가 사용자 프로그램으로 주어진다
비동기 입출력 프로세스 수행 중에 입/출력이 발생하면 끝나기를 기다리지 않고 사용자 프로세스로 제어가 넘어간다. 그러므로 시스템의 효율성이 높아진다
장치 상태 테이블 장치의 타입, 장치의 주소와 상태를 나타냄

동기/비동기 입출력에 대한 대안으로는 '비동기 방식을 사용하되, 사용자 프로세스에서 원한다면, 기다릴 수 있게 해야' 한다.

DMA 제어기는 입/출력 장치를 위해 버퍼, 포인터, 카운터를 설정하고, 장치 제어기는 전체 데이터 블록을 CPU 의 간섭없이 직접 메모리와 버퍼 저장장치 사이에 블록단위로 전송한다. 바이트 당 하나의 인터럽트를 발생시키는 것이 아니라 블록마다 하나의 인터럽트를 발생시킨다.

  1. 프로그램에서 데이터 전송 요청
  2. DMA 제어기 설정(주소, 전송길이)
  3. DMA 제어기와 메모리와의 전송
  4. 전송이 완료되면, DMA 제어기가 CPU 에 인터럽트
용어 설명
적재 명령(load) 주 메모리로 부터 CPU 내부의 레지스터로 한 워드 옮기는 것
저장 명령(store) 레지스터의 내용을 주메모리로 옮기는 것
주 메모리(Main Memory) CPU 가 직접 접근할 수 있는 유일한 저장장치(메인 메모리와 레지스터)
메모리 맵 입출력(memory mapped I/O) 메모리 주소의 일정범위를 지정하여 장치레지스터로 매핑한다

cpu 의 내장된 레지스터는 cpu 클락 한 싸이클에 접근이 가능하지만, 메인 메모리는 그렇지 못하다. 여러사이클이 걸릴 수도 있다. 이에 대한 방안으로 캐시(cache)가 있다.

하드 디스크는 여러장의 CD 모양의 플래터로 구성되어 있고 각 플래터 마다 읽기-쓰기 헤더가 있다. 읽기-쓰기 헤더는 움직일 수 있게 해주는 디스크 암에 붙어있다. 플래터의 표면은 트랙으로 나누어져 있고 다시 섹터로 나뉘어져 있다. 하나의 암위치에 있는 트랙의 집합을 실린더라고 한다.

A 라는 데이터의 복사본이 여러곳에 존재하게 될 때, 한 캐시의 데이터 A 값이 갱신될 경우, 즉시 반영되어야 하는 문제

사용자 모드와 모니터 모드(수퍼바이저 모드)
시스템 부트시에 모니터 모드로 시작하고, 운영체제가 적재되고 사용자 모드에서 사용자 프로세스가 시작된다. 트랩이나 인터럽트가 발생할 때마다 사용자모드에서 모니터모드로 바뀐다.

사용자는 직접 입/출력 명령을 할 수 없고, 운영체제를 통해서만 가능하다.

기준 레지스터(접근가능한 최하위 물리적 메모리 주소)와 한계 레지스터(범위의 크기)를 가지고 침범 여부를 판단한다.

타이머를 사용해서 일정한 시간 후에 인터럽트를 발생시켜서 운영체제가 제어권을 가질 수 있도록 한다.

이중모드를 도입(사용자모드, 모니터모드). 시스템 콜을 통해 사용자 프로세스가 OS 로 하여금 어떤 행동을 하도록 요청할 수 있다.

Operating Structures

프로그램디스크에 저장된 파일의 내용과 같이 수동적인 (passive) 개체
프로세스다음 수행할 명령을 지정하는 프로그램 카운터를 지닌 능동적인(active) 개체

운영체제는 메모리의 어느부분이 현재 사용되고 있으며, 누구에 의해 사용되고 있는지를 추적할 수 있어야 한다.
메모리 공간이 사용가능하게 될 때, 어떤 프로세스들을 메모리에 적재할 것인가를 결정할 수 있어야 한다. 필요에 따라 메모리공간을 할당하고 회수해야 한다.

파일의 생성 및 제거, 디렉토리 생성및 제거, 파일과 디렉토리를 조작하기 위한 operator 제공, 파일을 보조저장장치로 매핑, 안정적인 비휘발성 저장매체에 파일을 백업

버퍼링, 캐싱, 스풀링을 포함한 메모리 관리 구성요소/ 일반적인 장치 드라이버 인터페이스 특정 하드웨어 장치들을 위한 드라이버

자유공간(free-space) 관리, 저장 장소 할당, 디스크 스케줄링

분산 시스템에서의 운영체제가 어떤 방법(프로토콜)을 사용하여 계산 속도의 증가, 기능성의 증가, 데이터 이용성의 증가, 신뢰성 강화를 제공할 것인지..

허용되지 않은 리소스의 접근이나 오류를 어떻게 방지하여 신뢰성을 증가시킬 것인가..

사용자와 운영체제간의 인터페이스 역할을 하는 쉘(명령 해석기)를 제공

프로그램 수행, 입출력연산, 파일 시스템조작, 통신, 오류탐지 기능을 사용자에게 제공한다.

그밖에 운영체제 자체를 위한 서비스로는 자원할당, 회계, 보호가 있다.

사용자 프로세스와 운영체제간의 인터페이스를 제공

프로세스 제어, 파일조작, 장치관리, 정보유지보수, 통신

ms-dos 의 구조 인터페이스와 기능의 수준이 제대로 분리되어 있지 않다. 응용프로그램이 기본적인 입/출력 루틴에 접근이 가능했다. 잘못된 프로그램의 공격을 받기 쉬우며 전체시스템이 크래쉬된다
unix 의 구조 커널과 시스템프로그램으로 구성된다. 시스템 호출 인터페이스 아래와 물리적 하드웨어 위의 모든 것이 커널이다. 커널은 시스템 호출을 통해 파일시스템, cpu 스케줄링, 메모리 관리, 그리고 다른 운영체제 기능을 제공한다. 시스템 프로그램은 컴파일 및 파일조작과 같은 유용한 기능을 제공하기 위해 커널이 제공하는 시스템 호출을 사용

계층적 접근 방식의 주된 장점은 모듈화에 있다. 이 접근방법은 시스템 검증과 디버깅 작업을 단순화한다. 첫 번째 층이 하드웨어(하드웨어는 정확하다고 가정함)만을 사용하여 기능을 구현했기 때문에 나머지 시스템에 아무런 신경을 쓰지 않고 디버깅할 수 있다. 첫 번째 디버깅이 끝나면 두 번째 층이 디버깅하는 동안, 하위층(첫번째 층)은 잘 동작한다고 볼 수 있기 때문에, 문제가 발생한다면 문제는 두 번째 층에 있다. 각층은 자신보다 하위수준의 층에 의해 제공된 연산들만을 사용해 구현한다. 한 층은 이러한 연산이 어떻게 구현되는지 알 필요가 없고, 다만 연산들이 무엇을 하는지만 알면된다. 그러므로 각 층은 특정 데이터구조, 연산 그리고 하드웨어의 존재를 상위층에 대해 숨기게 된다.
계층적 접근방법의 어려운 점은 여러층을 적절히 정의하는 것이다. 계층적 구현 방법의 마지막 문제점은 다른 타입의 구현방법보다 효율성이 낮다는 것이다.

ex) 사용자 프로그램이 입/출력 연산을 수행할 경우, 시스템 호출을 수행하여 여러층을 거치면서 오버헤드(매개변수 변경, 데이터 전달로 인한)가 발생하여 비계층시스템보다 더 오래 걸리게 된다.
해결방법) 모듈화된 코드가 갖는 대부분의 장점을 가지면서 반면에 계층정의나 상호작용의 어려운 문제점을 피하면서 보다 많은 기능을 가진 더 적은 수의 층의 설계하는 것이다. 대표적인 운영체제로는 OS/2 가 있다.

모든 중요치 않은 구성요소를 커널로부터 제거하고, 그들을 시스템 및 사용자 수준 프로그램으로 구현하여 작은 커널의 운영체제를 구성

장점 운영체제의 확장이 용이. 모든 새로운 서비스는 사용자공간에 추가되며 따라서 커널의 변경을 필요로 하지 않는다. 변경하더라도 커널의 작은 부분만의 변경이 필요할 뿐이다. 결과적으로 한 하드웨어에서 다른 하드웨어로의 이식이 쉽다. 대부분의 서비스가 사용자 프로세스로 수행되기 때문에 보다 높은 보안성과 신뢰성을 제공한 서비스가 잘못되더라도 운영체제의 다른 부분은 아무런 영향을 받지 않는다

비 가상기계에서는 여러개의 프로세스들이 하나의 커널과 하드웨어를 공유하지만 가상기계 접근방법에서는 각각의 프로세스가 자신의 전용 하드웨어(메모리)와 커널에서 수행되는 것 같은 환상(착각)을 낳는다. 가상기계는 물리적인 자원(리소스)을 공유해서 각각의 프로세스마다 제공한다.

구현 물리적인 기계가 두가지모드(사용자, 모니터)를 갖는 것처럼, 가상기계도 두가지 모드를 갖는다. 이것은 물리적인 사용자모드에서 수행한다. 가상기계 상에서 시스템 호출이 발생하면 가상기계에서는 물리적인 컴퓨터에서 처럼 똑같이 흉내내야 한다. 한가지 차이점이 있다면, 그것은 시간이다. 가상기계를 제공하기 위해서 모든 명령어를 흉내내야 하기 때문에 느려질 수 있다
장점 각 가상기계는 다른 모든 가상기계로부터 완전히 격리되며, 따라서 보안의 문제점이 없다. OS 가 변경되었을 때의 시스템 개발 시간을 단축시킬수 있다

java 은 클래스 로더와 아키텍처 중립적인 바이트 코드를 수행하는 java 인터프리터로 구성. 클래스 로더는 java 인터프리터에 의해 수행될 수 있도록 java 프로그램과 java api 로부터 .class 파일을 로드한다. java 인터프리터는 바이트 코드를 한번에 하나씩 해석하는 소프트웨어 인터프리터이거나 또는 호스트 컴퓨터를 위해 아키텍처 중립적인 바이트 코드를 고유의 기계언어로 변환하는 just-in-time 컴파일러일수도 있다.

java 플랫폼은 아키텍처 중립적이고 이식가능한 프로그램을 개발할 수 있게 해준다. 플랫폼 구현은 시스템 특징적이며, 그것은 시스템을 java 프로그램에 표준적인 방법으로 추상화하여, 깨끗하고 아키텍처 중립적인 인터페이스를 제공한다. 이 인터페이스는 jvm 과 api 를 구현한 모든 시스템 상에서 .class 파일을 수행될 수 있게 한다.

설계목표 시스템의 목표와 명세를 정의하는 일이다
매커니즘 및 정책 매커니즘으로부터 정책을 분리하는 것. 융통성을 위해 중요하다. 정책은 장소가 바뀌거나 시간이 흐름에 따라 변경될 수 있다
구현 운영체제는 시스템 구현언어 또는 고급언어로 작성된다. 이러한 특성은 운영체제의 구현, 유지관리, 이식성을 향상시킨다
시스템 생성 sysgen 프로그램을 통해 운영체제가 어떤 환경(h/w, s/w)에서 실행되는지에 관해 시험한다. 이로써 생성된 시스템의 크기와 일반성 그리고 하드웨어 구성의 변화에 따른 변경의 용이성이 있다
  • computer/rtcclab/os_세미나.txt
  • Last modified: 3 years ago
  • by likewind