본문 바로가기

운영체제/공룡책

운영체제 구조

운영체제

 운영체제(Operating System)이란, 컴퓨터 하드웨어를 관리하는 소프트웨어다.

하드웨어와 응용 프로그램 사이의 중재작 역할을 수행한다.

자원을 프로그램에 효율적으로 할당하기 위해 존재한다.

 

1-1

운영체제의 역할

 컴퓨터 시스템은 네 가지 구성요소인 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분한다.

 하드웨어 :  CPU, I/O 장치, 기본 계산용 자원을 제공 

 운영체제 : 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정

응용 프로그램 : 워드 프로세서, 스프레드시트 ,컴파일러,웹 브라우저 등 사용자의 계산 문제를 해결하기 위해 자원이 어떻게 사용되는지 정의

 

시스템의 관점

 운영체제 = 자원 할당자(resource allocator)

CPU 시간, 메모리 공간, 저장장치 공간, 입출력 장치 등을 가진다.

결국, 운영체제는 입출력 장치와 사용자 프로그램을 제어할 필요성을 강조하는 제어 프로그램( control program)이다.

 

 

1-2

컴퓨터 시스템의 구성

 컴퓨터 시스템은 하나 이상의 CPU와 공유 메모리 사이의 엑세스를 제공하는 버스를 통해 장치 컨트롤러로 구성된다.

일반적으로, 운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 있다. 장치 드라이버는 장치 컨트롤러의 작동을 알고, 인터페이스를 제공한다.

 CPU와 장치 컨트롤러는 병렬로 실행되어 메모리 사이클을 놓고 경쟁한다. 공유 메모리를 질서 있게 엑세스하기 위해 메모리 컨트롤러는 메모리에 대한 엑세스를 동기화한다.

 

인터럽트

 인터럽트는 적절한 서비스 루틴을 제공하며, CPU의 서비스 메커니즘의 중요한 부분이다.

인터럽트 핸들러를 호출함으로서, 인터럽트 루틴에 대한 포인터들의 테이블을 이용할 수 있다. 이때, 테이블의 포인터에 의하여 간접적으로 인터럽트 루틴이 호출되며, 포인터들의 테이블은 하위 메모리에 저장된다. 이러한, 인터럽트 서비스 루틴의 주소를 제공하기 위해, 인터럽트 벡터가 인터럽트 요청과 함께 주어진 고유의 유일한 장치 번호로 색인된다.

 

구현

 기본적인 인터럽트 메커니즘은 다음과 같이 작동한다.

Interrupt request line는 명령어의 실행을 완료할때마다, CPU가 감지를 한다. CPU가 컨트롤러의 인터럽트 요청 라인에 신호를 보낸 것에 감지하면, Interrupt-handler routine으로 점프한다.  그런 다음, 인덱스의 주소에서 실행을 시작한다.

인터럽트 처리기는 필요한 처리를 수행하고, 상태 복원을 수행하고, return_from_interrupt 명령어를 통해 CPU를 인터럽트 전 실행 상태로 되돌린다. 즉, raise => catch => dispatch => clear을 통하여 인터럽트- 구동 입출력 사이클이 된다.

 

 벡터 방식 인터럽트 기법의 목적

 서비스가 필요한 장치를 결정하기 위해 하나의 인터럽트 핸들러가 가능한 모든 인터럽트 소스를 검색할 필요를 줄이기 위한 것이다.

 실제로 컴퓨터에는 인터럽트 백터의 주소 개수보다 많은 장치가 있다. 이 문제를 해결하기 위해 인터럽트 체인을 사용한다.

인터럽트 벡터의 각 원소는 인터럽트 핸들러 리스트의 헤드를 가리킨다. 인터럽트가 발생하게 되면, 요청을 처리할 수 있는 상응하는 핸들러가 호출될때까지 오버해드와 인터럽트 핸들러로 디스패치하는 비효율성의 절충안이다.

 

인터럽트 기법은 또한, 우선수위 레벨(interrupt priority level)로 구현한다. CPU는 모든 인터럽트를 마스킹하지 않고도 우선순위가 낮은 인터럽트 처리를 연기할 수 있으며, 우선순위가 노은 인터럽트의 실행을 선점할 수 있다. 

 

간단하게 요약자면, 인터럽트는 최신 운영체제에서 비동기 이벤트를 처리하기 위해 사용된다.

 

 

1-2.2 저장장치 구조

 CPU는 메모리에서만 명령을 적재할 수 있으므로 실행하려면 프로그램을 메모리에 적재해야한다.

대부분의 메인 메모리(random-access memory, 또는 RAM)라 불린다. 메인 메모리는 (dynamic random-access memory) DRAM라 불리는 반도체 기술로 구현된다.

 

 컴퓨터는 다른 형태의 메모리도 사용한다. 최초 PC를 작동시킬 때 부트스트랩 프로그램이 실행되며, 전기적으로 소거 가능한 읽기 전용 메모리 (EEPROM) 및 기타 형태의 펌웨어(쓰기 작업이 자주 발생하지 않고 비휘발성인 저장 장치)를 사용한다. 예를 들어, iphone은 EEPROM을 사용하여, 장치의 일련 번호 및 하드웨어 정보를 저장한다.

 

 모든 형태의 메모리는 바이트의 배열을 제공한다. 각 바이트는 자신의 주소를 가지고 적재, 저장, 명령을 통하여 상호작용한다. 폰 노이마 구조 시스템에서 실행되는 명령 - 실행 사이클은 먼저 메모리로부터 명령을 인출해, 그 명령을 IR(명령 레지스터)에 저장한다. 이어서 명령을 해독하고, 이는 메모리로부터 피연산자를 인출하여 내부 레지스터에 저장하도록 유발할 수 있다. 하지만, 우리는 명령 카운터(instruction counter), 색인(indexing), 간접 주소 (indirection), 리터럴 주소literal address)등 어떻게 생성 되었는 지 알지 못한다.

 1. 메인 메모리는 모든 필요한 프로그램과 데이터를 영구 저장하기에 크기가 너무 작다.

 2. 메인 메모리는 전원 공급이 되지 않으면 내용이 삭제되는 휘발성 저장 장치이다.

이러한, 단점들을 극복하기 위해 메인 메모리의 확장으로 보조저장장치를 제공한다. 

 

 

 대부분의 프로그램은 메모리에 적재될 때까지 보조저장장치에 저장된다. 그런 후 많은 프로그램이 보조저장장치를 처리 소스 및 대상으로 사용한다. 

 

1-2.3 입출력 구조

 운영체제 코드의 상당 부분은 시스템의 안정성과 성능에 대한 중요성과 장치의 특성으로 인해 I/O 관리에 할애된다.

인터럽트 구동의 대량 데이터 이동에 사용되는 오버헤드를 유발할 수 있는 문제를 해결하기 위해, (Direct Memory Access) DAM 가 사용된다. 장치에 대한 버퍼 및 포인터, 입출력 카운터를 세팅 후 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다.

 

 

 

1-3 컴퓨터 시스템 구조

 

1-3.1 단일 처리기 시스템

 하나의 CPU를 포함하는 단일 프로세서를 사용했다. 코어는 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소이다. 코어를 가진 하나의 메인 CPU는 프로세스의 명령어를 포함하여 범용 명령어 세트를 실행할 수 있다. 각 전용 처리기들은 제한된 명령어 집합을 실행하고 사용자 프로세스를 실행하지는 않는다. 자기 고유의 디스크 큐와 스케줄링 알고리즘을 구현한다.

 

1-3.2 다중 처리기 시스템

 시스템에서 단일 코어 CPU가 있는 두개 이상의 프로세서가 있다. 프로세서는 컴퓨터 버스 및 클록, 메모리 및 주변 장치를 공유한다. 다중 처리기 시스템의 장점은 처리량 증가이다. 여러 프로세스가 하나의 작업에 협력할 때 모든 프로세스가 오바르게 작동하는 유지하기 위해 일정한 양의 오버헤드가 발생한다. 이 오버헤드와 공유 자원에 대한 경합은 추가 프로세서의 예상 이득을 낮춘다. 

  일반적인 다중 처리기 시스템은 각 피어  CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업을 SMP(symmetric multiprocessing)을 사용한다. 각 CPU 처리기에는 개별 또는 로컬 캐시뿐만 아니라 자체 레지스터 세트가 있다. 그러나 모든 프로세서는 시스템 버스를 통해 물리 메모리를 공유한다. 따라서 이 모델의 장점은 많은 프로세스를 동시에 실행할 수 있다는 것이다. 이러한, 다중 처리기 시스템을 사용하면 프로세스 및 메모리와 같은 자원을 다양한 프로 세서간에 동적으로 공유할 수 있으며, 작업 부하 분산을 낮출 수 있다.

 

 다중 처리기 시스템에 CPU를 추가하면 컴퓨터 성능이 향상된다. 그러나 너무 많이 추가하면, 시스템 버스에 대한 병목 현상이 되어 성능이 저하되기 시작한다. 다른 방법은 각 CPU에 작고 빠른 로컬 버스를 통해 엑세스 되는 자체 로컬 메모리를 제공하는 것이다. 즉, 모든 CPU가 하나의 물리 주소 공간을 공유한다. 

 

1-3.3 클러스트형 시스템

 여러 CPU를 가진 시스템의 또 다른 유형은 클러스터형 시스템이다. 클러스터 시스템은 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성한다는 점에서 다중 처리기 시스템과 차이가 난다. 각 노드는 통상 다중 코어 시스템이다. 일반적인, 클러스터 컴퓨터는 근거리 통신망 LAN , InfiniBand와 같은 interconnect로 연결된다.

 클러스트링은 높은 가용성(availability)을 제공하기 위해 사용된다. 클러스터링은 비대칭형 클러스터링에서는 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 긴급 대기(hot-standby)모드 상태를 유지한다. 이 긴급 대기 모드의 호스트는 활성 서버들을 감시하는 작업만을 수행한다. 반면 대칭형 클러스터링에서는 둘 이상의 호스트들이 응용 프로그램을 실행하고 서로를 감시한다. 가용한 하드웨어를 모두 사용하기 때문에 대칭형 구성이 더 효율적이다. 

 

 

1-4 운영체제의 작동

1-4.1 다중 프로그래밍과 다중 태스킹

 

 다중 프로그래밍은 CPU가 항상 한 개는 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높이고 사용자 만족도를 높인다.  다중 태스킹(multitasking)은 다중 프로그래밍의 논리적 확장이다. 다중 태스킹 시스템에서 CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 자주 발생하여 사용자에게 빠른 응답 시간을 제공하게 된다. 

 

 동시에 여러 프로세스를 메모리에 유지하려면 메모리 관리 방식이 필요하다. 이때, 프로세스가 동시에 프로세스를 실행하기 위ㅎ여 CPU 스케줄링이 필요하다. 또한, 멀티 태스킹에서 운여체제는 적절한 응답 시간을 확보해야하는데, 이를 확보하기 위해 가상 메모리를 사용한다. 이는 데이터량이 많은 메모리에서 일부분의 데이터가 메모리에 적재하여 프로세스를 실행하는 방식이다. 가상 메모리는 메인 메모리를 균등한 저장장치의 배열로 추상화하여, 사용자에게 논리 메모리를 물리 메모리로부터 분리시킨다. 파일 시스템은 보조 저장장치에 존재한다. 따라서, 저장장치 관리가 제공되어 시스템은 부적절한 사용으로부터 자원을 보호해야 한다.

 

1-4.2 이중-모드와 다중모드 운용

 

 운영체제와 사용자는 컴퓨터 시스템의 자원을 공유하기 때문에 각 컴퓨터 시스템이 자원을 취하는 차별화를 두었다.

두 개의 연산 모드, 사용자 모드와 커널 모드[supervised mode] 를 필요로 한다.

 모드 비트라고 하는 하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가되었다. 

비트(0) => 커널 모드, 비트(1) => 사용자 모드를 나타낸다. 운영체제가 컴퓨터의 제어를 얻을 때마다 항상 커널 모드에 있게 된다. 커널 모드에 대한 접근을 위한 보호 링이 존재하며, VMM(virtual maching manager)이 시스템을 제어함으로서 커널보다는 적은 권한을 갖지만 사용자 프로세스보다 많은 권한을 가지게 한다.

 

 1-4.3 타이머

 운영체제의 CPU가 무한루프에 빠지거나 시스템 서비스 호출에 실패하여, 운영체제로 제대로 복귀할 수 있도록 설정하는 것이다. 가변 타이머는 일반적으로 고정률의 클록과 계수기로 구현한다. 사용자에게 제어권을 이전하기 전에, 운영체제의 타이머가 인터럽트 된다면, 자동으로 운영체제로 권한이 넘어가게 되어있다.

 

 

 

1.5 자원 관리

1-5.1 프로세스 관리

 실행중인 프로그램은 프로세스이다. 프로세스는 작동하기 위하여 I/O , CPU, 메모리, 파일 등 여러 자원을 필요로 한다. 이때, 자원은 프로세스가 실행되는 동안 할당된다. 즉, PC(프로그램 카운터) 를 가진 능동적(active) 객체가 한 프로세스가 끝나면 다음 프로세스를 실행하는 명령어에 의하여 스레드를 실행한다. 

 

1-5.2 메모리 관리

 메인 메모리는 CPU와 입출력 장치에 의하여 가장 빠르게 접근이 가능한 데이터 저장소이다. 

CPU의 명령어 인출 사이클(instruction fectch-cycle) 과 자료 인출 사이클(data fetch-cycle)로 이루어져 있다. 즉, CPU가 명령어를 수행하기 위해서 메모리 위에 명령어가 적재되어 있는 상태여야한다.

 

 프로그래밍이 수행되기 위해서 반드시 매핑(mapping)되고 메모리에 적재되어야한다. 메모리의 프로그램 명령어와 데이터에 접근하고, 프로그램이 종료되면 할당되었던 메모리를 해제함으로서 모든 공간이 가용공간이 되는 작업을 반복한다. 

 

1-5.3 파일 시스템 관리

 컴퓨터 시스템의 편리한 사용을 위해, 운영체제는 정보 저장장치에 대한 논리를 제공한다. 운영체제는 저장장치의 물리적 특성을 추상화하여 논리적 저장 단위인 파일을 정의한다. 특히, 파일 관리 와 같은 장치에 대한 접근 속도, 용량, 데이터 전송률, 그리고 접근 방식 등의 속성이 존재한다. 

 

1-5.5 캐시 관리

 캐싱은 컴퓨터 시스템의 중요 원리다. 정보가 사용됨에 따라, 빠른 장치인 캐시에 일시적으로 복사된다. 만약 데이터 접근생겼을 때, 캐시에 정보가 있다면 우리는 캐시에 데이터를 복사해오지만, 존재하지 않았을 때 메모리로부터 그 정보를 직접 가져와야한다. 게다가 CPU 내부의 프로그램 가능한 레지스터들은 메인 메모리를 위한 고속의 캐시로 볼 수 있다. 

 따라서 프로그래머는 어떤 정보를 메인 메모리에 두고, 어느 정보를 래지스터에 둘 것인지를 결정하는 레지스터 할당 정책과 교체 알고리즘 구현을 중요시 해야한다.

 

 메모리 계층 구조에서, 멀티 태스킹 과정에서 메모리 접근이 이루어졌을때, 가장 최근 데이터값의 캐시를 가져와야하는 복잡성을 띄고 있다. 이를 캐시 일관성 문제라고 한다.

 

 

1.7 가상화

 가상화는 여러가지 실행 환경으로 추상화하여 개별 환경이 컴퓨터에서 실행되고 있다는 환상을 만들 수 있는 기술이다. 

운영체제가 다른 운영체제 내에서 하나의 응용처럼 수행될 수 있게 한다. 

 가상화의 특징은 특정 CPU를 위해 컴파일된 운영체제가 동일 CPU용의 다른 운영체제 내에서 수행된다. 이는 다수 사용자가 작업을 병행 수행하기 위한 방법으로, 운영체제 복사본들을 수행하여 각 게스트는 자신의 응용을 수행할 수 있게 해준다.

 

1.8 분산 시스템

분산 시스템의 컴퓨터들은 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록 네트워크로 연결되어 있는것을 말한다. 분산 시스템은 네트워킹에 의존하며, 네트워크는 노드 간의 거리에 의해 유형이 결정된다. 잘 알려진 LAN, WAN, MAN , PAN 등이 존재한다. 일부 운영체제는 다른 컴퓨터와의 프로세스 간 교루를 집중한 네트워크 운영체제가 존재하며, 자율적인 환경에서 다른 컴퓨터와 용이하게 접근할 수 있도록 한다. 

 

 

'운영체제 > 공룡책' 카테고리의 다른 글

프로세스  (0) 2024.09.17
운영체제 서비스  (0) 2024.09.14