[TIL] 운영체제 공룡책 Chapter 1.3 - 1.4

5049 단어 TILOSOS

1.3. 컴퓨터 시스템 구조_Computer-System Architecture

컴퓨터 시스템은 사용된 범용 처리기의 수에 따라 분류 가능하다.

1.3.1. 단일 처리기 시스템_Single-Processor Systems

단일 처리 코어를 가진 하나의 CPU를 포함하는 단일 프로세서
각 장치들은 각각의 마이크로프로세서를 가지고 각자 맡은 업무를 처리하는 형태이므로 운영체제가 각 입출력 장치에 대해 컨트롤할 수 없는 형태이다.

코어는 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소이다.
코어를 가진 하나의 메인 CPU는 프로세스의 명령어를 포함하여 범용 명령어 세트를 실행할 수 있다.

1.3.2. 다중 처리기 시스템_Multi-Processor Systems

각각 단일 코어 CPU가 있는 두개 이상의 프로세서가 있다.
프로세서는 컴퓨터 버스 및 클록, 메모리 및 주변 장치를 공유 한다.

프로세서 수를 늘리면 처리량이 증가하지만 N개의 프로세서만큼 속도가 비례해서 증가하진 않는다.
여러 프로세서가 하나의 작업에 협력할 때 일정량의 오버헤드가 발생한다.
이 오버헤드와 공유 자원에 대한 경합은 추가 프로세서의 예상 이득을 낮춘다.

일반적인 다중 처리기 시스템은 SMP(Symmetric Multiprocessing)를 사용한다.

SMP(Symmetric Multiprocessing)
각 피어 CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업을 수행

각 CPU 처리기에는 개별 또는 로컬 캐시뿐만 아니라 자체 레지스터 세트가 있다.
그러나 모든 프로세서는 시스템 버스를 통해 물리 메모리를 공유한다.
프로세서가 특정 자료구조를 공유하는 경우 비효율성을 피할 수 있다.

같은 프로세서 칩에 두 개 의 코어를 가지는 이중 코어 설계에서 각 코어에는 자체 레지스터 세트와 레벨 1(L1) 캐시(로컬 캐시)를 가지고 있다.
또한 레벨 2(L2) 캐시는 칩에 국한되지만 두 처리 코어에서 공유한다.
아키텍쳐 대부분은 로컬 및 공유 캐시를 결합한 접근 방식을 채택한다.

NUMA

다중 처리기 시스템에 CPU를 추가하면 컴퓨팅 성능이 향상되지만, 시스템 버스에 대한 경합이 병목 현상이 되어 성능이 저하될 우려가 있다.
이를 해결하기 위해 각 CPU에 작고 빠른 로컬 버스를 통해 엑세스 되는 ~자체 로컬 메모리~ 를 제공할 수 있다.
모든 CPU가 하나의 물리 주소 공간을 공유한다.


- 장점
1. CPU가 로컬 메모리에 액세스 할 때 빠르다.
2. 시스템 상호 연결에 대한 경합이 없어진다.
- 단점
1. CPU가 시스템 상호 연결을 통해 원격 메모리에 액세스해야 할 때 지연 시간이 증가하여 성능 저하가 발생할 수 있다.

블레이드 서버

다수의 처리기 보드 및 입출력 보드, 네트워킹 보드들이 하나의 섀시(chassis) 안에 장착되는 형태

블레이드 서버와 전통적 다중 처리기 시스템과의 차이점은 각 블레이드-처리기 보드는 독립적으로 부팅 가능, 자기 자신의 운영체제를 수행

1.3.3. 클러스터형 시스템_Clustered Systems

특징
- 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성
- 각 노드는 통상 다중 코어 시스템이다.

통상적인 클러스터 시스템은 저장장치를 공유하고 근거리 통신망(LAN)이나 InfiniBand와 같은 고속의 상호 연결망으로 연결된다.

클러스터링은 통상 높은 가용성을 제공하기 위해 사용된다. (클러스터 내 하나 이상의 컴퓨터 시스템이 고장 나더라도 서비스는 계속 제공)

높은 가용성은 안정성을 향상해 많은 응용 프로그램에서 중요하다.
남아 있는 하드웨어 수준에 비례하여 서비스를 계속 제공하는 기능을 우아한 성능 저하(graceful degradation)라고 한다.

1.4. 운영체제의 작동_Operating-System Operations

부트스트랩 프로그램이 운영체제 커널을 찾아 메모리에 적재한다.
일부 서비스는 커널이 실행되는 전체 시간 동안 실행되는 시스템 데몬이 되기 위해 부팅할 때 메모리에 적재되는 시스템 프로그램에 의해 커널 외부에서 제공된다.
Linux에서 첫 번째 시스템 프로그램은 “systemd”이며 다른 많은 데몬을 시작한다.

1.4.1. 다중 프로그래밍과 다중 태스킹_multiprogramming and multitasking

다중프로그래밍은 CPU가 항상 한개는 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높인다.
다중 프로그램 시스템에서 실행 중인 프로그램을 프로세스라고 한다.
운영체제는 여러 프로세스를 동시에 메모리에 유지한다.

운영체제는 이러한 프로세스 중 하나를 선택해 실행하기 시작한다.
즉, 프로세스는 I/O 작업과 같은 일부 작업이 완료되기를 기다려야 할 수도 있다.
다중 프로그래밍이 되지 않는 시스템에서는 CPU가 유휴 상태일 수 있다.

멀티 태스킹은 다중 프로그래밍의 논리적 확장이다.
멀티 태스킹 시스템에서 CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 자주 발생하여 사용자에게 빠른 응답 시간을 제공한다.
멀티 태스킹 시스템에서 운영체제는 적절한 응답 시간을 보장해야 한다.

가상 메모리(virtual memory)
이것은 일부만 메모리에 적재된 프로세스의 실행을 허용하는 기법이다.
프로그램이 물리 메모리의 크기보다 더 커도 된다.
메인 메모리를 크고 균등한 저장장치의 배욜로 추상화하여, 사용자에게 보이는 논리 메모리를 물리 메모리부터 분리시킨다.

다중 프로그래밍 및 멀티 태스킹 시스템도 파일 시스템을 제공해야 한다.

1.4.2. 이중 모드와 다중모드 운용_Dual-Mode and Multimode Operation

운영체제는 적어도 두 개의 독립된 연산모드를 제공한다.
트랩이나 인터럽트가 발생할 때마다, 하드웨어는 사용자 모드에서 커널모드로 전환한다.
시스템 부트 시, 하드웨어는 커널 모드에서 시작 -> 운영체제 적재 -> 사용자 모드에서 사용자 프로세스 시작하는 형태로 진행된다.
하드웨어를 직접 컨트롤 할 수 있는 명령은 커널 모드에서만 실행된다.

사용자모드

컴퓨터 시스템이 사용자 응용을 위하여 실행될 때 시스템은 사용자 모드에 있게 된다.

커널 모드(슈퍼바이저 모드, 시스템 모드, Privileged mode)

운영체제가 컴퓨터의 제어를 얻을 때마다 커널 모드에 있게 된다.
시스템은 사용자 프로그램으로 제어를 넘기기 전에 항상 사용자 모드(모드 비트 1)로 전환한다.

시스템 콜

사용자 프로그램이 자신을 대신하여 운영체제가 수행하도록 지정되어 있는 작업을 운영체제에 요청할 수 있는 방법을 제공
컴퓨터 시스템의 처리기가 지원하는 기능에 따라 다양한 방법으로 호출된다.
시스템 콜은 일반적으로 인터럽트 벡터의 특정 위치로 트랩을 거는 형태를 취한다.
이 트랩은 보통 trap명령어를 통해 수행되지만 몇몇 시스템은 syscall 이라는 특정 명령어를 가지기도 한다.

trap 명령어
Bash Shell Script에서 유닉스계열의 시그널을 제어하는 명령어
대표적인 예로 리눅스의 Ctrl + C, Ctrl + Z를 눌러서 프로그램을 종료 또는 중지하는 특정 입력이 들어 올 때 인터럽트가 발생

모드 비트
하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가되어 있다.
이 비트는 커널모드(0) 또는 사용자 모드(1)를 나타낸다.
모드 비트로 운영체제를 위해 실행되는 작업과 사용자를 위해 실행되는 작업을 구분할 수 있다.

1.4.3. 타이머_Timer

운영체제가 CPU에 대한 제어를 유지할 수 있도록 보장하기 위해, 사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여, 제어가 운영체제로 복귀하지 않는 경우가 없도록 방지하는 방법 중 하나

좋은 웹페이지 즐겨찾기