Operating System
운영체제(Operating System, OS)는 컴퓨터 시스템에서 하드웨어와 소프트웨어 사이의 인터페이스 역할을 수행하는 시스템 소프트웨어이다. 운영체제는 컴퓨터 자원을 효율적으로 관리하고, 사용자 및 응용 프로그램에게 필요한 서비스를 제공하는 역할을 한다.
User <-> Programs <-> Operating system <-> Hardware
Interrupt
인터럽트(interrupt)는 컴퓨터 시스템에서 발생하는 중단 신호를 말한다. 이는 운영체제나 하드웨어 디바이스가 프로세서의 실행을 일시적으로 중단시키고, 특정 이벤트에 대한 처리를 수행하도록 하는 메커니즘이다.
인터럽트가 발생하면 현재 실행 중인 작업이 일시적으로 중단되고, 해당 인터럽트를 처리하는 인터럽트 서비스 루틴(ISR)이 실행된다. 그러면 ISR은 인터럽트 원인을 파악하고, 필요한 작업을 수행한 후에는 중단되었던 작업을 재개한다.
예를 들어 음악을 듣고 있다가 전화가 오는 상황을 생각해보자. 이때 전화는 음악 재생을 중단시키고 우리는 다시 음악을 듣기 위해 전화를 받는다. 이때 음악 재생은 현재 실행 중인 작업, 전화의 발생은 인터럽트의 발생, 전화를 받는 행위를 ISR이라 볼 수 있다.
Hardware Interrupt
인터럽트에는 하드웨어 인터럽트와 소프트웨어 인터럽트가 존재한다. 하드웨어 인터럽트는 주로 하드웨어 디바이스에서 발생한느 이벤트에 대한 처리를 위해 사용된다. 예를 들어. 입출력 장치가 데이터 전송을 완료하거나 오류가 발생할 경우 하드웨어 인터럽트를 발생시켜 운영체제에 알리는 경우가 있을 수 있다. 또한 하드웨어 인터럽트에는 maskable interrupt와 non maskable interrupt가 있는데 maskable interrupt는 무시하거나 비활성화 할 수 있는 인터럽트이고 non maskable interrupt는 복구가 불가능한 메모리 오류나 타이머의 타임아웃 등 무시할 수 없는 인터럽트를 말한다.
Software Interrupt
소프트웨어 인터럽트의 경우 주로 소프트웨어 내부에서 발생하는 이벤트에 대한 처리를 위해 사용된다. 예를 들어, 프로그램에서 예외 상황(0으로 나누기, 잘못된 메모리 접근 등)이 발생하거나 응용 프로그램이 운영체제의 특정 서비스를 호출할 때(System call 등)에 소프트웨어 인터럽트가 사용된다. 일반적으로 하드웨어 인터럽트보다 낮은 처리순위를 가진다.
Interrupt Process
1. 인터럽트 발생
하드웨어나 소프트웨어에서 인터럽트가 발생한다. 하드웨어 인터럽트의 경우, 인터럽트 신호를 전달하는 인터럽트 컨트롤러가 인터럽트를 감지하고, 해당 인터럽트 유형과 우선순위를 확인한다.
2. 현재 실행 중인 작업 저장
인터럽트 발생 시, 현재 CPU에서 실행 중인 작업(프로세스 또는 스레드)의 상태를 저장하기 위해 프로세스 제어 블록(Process Control Block, PCB)에 해당 작업의 정보를 저장한다.
3. 인터럽트 처리
인터럽트 처리를 위해 CPU는 인터럽트 벡터 테이블(Interrupt Vector Table)을 참조한다. 인터럽트 벡터 테이블은 각 인터렙트에 대한 ISR의 주소를 가지고 있다. CPU는 인터럽트 번호를 비교하여 해당 인터럽트에 대한 ISR 주소를 찾아 실행한다.(ISR은 인터럽트가 발생했을 때 실행되는 특정 코드 블럭이다.)
4. ISR 실행
ISR은 해당 인터럽트에 대한 처리 작업을 수행한다. ISR은 인터럽트 종류에 따라 다양한 작업을 수행한다. 예를 들어, 입출력 ISR은 입출력 작업의 결과를 처리하거나, 다음 작업을 위해 데이터를 수신하는 등의 작업을 수행한다.
5. 인터럽트 처리 완료 및 복구
ISR이 처리를 완료하면 PCB에 저장된 이전의 작업 상태를 복원한다. 이전의 작업 상태로 복원되면 해당 작업은 중단된 지점에서 다시 실행을 재개한다.
일련의 과정으로 인터럽트 처리가 완료되고 시스템이 재개된다.
Kernel and System Call
운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가 있으면 메모리 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 메모리에 상주하는 운영체제의 부분을 kernel(커널)이라고 한다.
사용자 프로세스(User process)는 사용자 모드(User mode)에서 실행되다가 시스템 자원을 사용해야 할 때 시스템 콜을 호출해서 커널 모드로 전환되어 작업을 수행하고 완료 시 다시 사용자 모드로 전환한다.
시스템 콜은 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근하여 필요한 기능을 할 수 있게 해준다. 사용자 프로그램은 운영체제의 기능을 직접 호출할 수가 없기 때문에 시스템 콜을 통해 운영체제에게 특정 작업을 요청한다. 보통 직접적으로 시스템콜을 사용하기 보다는 API(라이브러리 함수)를 통해 사용하게 된다.
위 예시에서 printf() 함수는 user mode에서 수행되어 stdio 라이브러리를 호출한다. stdio 라이브러리는 시스템콜인 write()를 호출하고, 실행의 흐름은 kernel mode 로 바뀐다. 커널은 호출을 실행하여 모니터에 문자열을 출력하고 실행의 흐름은 다시 user mode 로 넘어와 printf()의 함수의 다음단계를 진행한다.
System call Parameter Passing
종종 시스템 콜이 무엇인지에 대해 여러가지 정보들이 요구될 수 있는데 이때 운영체제에 매개변수를 전달하기 위한 여러가지 방법들이 존재한다.
1. 레지스터를 통한 전달
프로세스가 매개변수를 레지스터에 저장하고 운영체제는 해당 레지스터에서 매개변수를 읽어들인다.
2. 스택을 통한 전달
프로세스는 스택의 특정 위치에 매개변수를 push시하고 운영체제는 해당 위치에서 매개변수를 pop하여 읽는다.
3. 레지스터 및 메모리 위치 지정
레지스터보다 매개변수의 내용이 많을 시에는 메모리에 블록이나 테이블을 만들어 그 주소를 전달한다.
Operating System Structure
1. 모놀리식 구조(monolithic structure)
모놀리식 구조는 전통적인 운영체제 구조 중 하나로, 프로세스 관리, 메모리 관리, 파일 시스템, 입출력 관리 등 운영체제의 다양한 기능들이 하나의 커널 내에 구현되어 있다.
모놀리식 구조의 장점은 다음과 같다.
1. 단순하고 직관적인 구조
단일 실행 파일로 모든 기능이 통합되어 있으므로 구조가 간단하고 이해하기가 쉽다.
2. 빠른 실행
모든 기능이 하나의 커낼 내에서 실행되기 때문에 함수 호출 및 인터페이스 간의 오버헤드가 적다.
반면에 단점 또한 존재한다.
1. 확장성과 유지보수의 어려움
운영체제의 모든 기능이 하느의 커널에 포함되어 있으므로, 새로운 기능을 추가하거나 기존 기능을 수정하려면 전체 커널을 재컴파일하고 다시 배포해야 한다. 이로 인해 확장성이 떨어지고 유지보수가 어려울 수 있다.
2. 안정성 문제
하느의 커널 내에서 실행되는 기능들은 서로 영향을 주고 받을 수 있으므로, 한 기능의 오류나 충돌이 전체 시스템에 영향을 미칠 수 있다.
3. 자원의 공유 문제
모든 기능이 하나의 커널 내에서 실행되기 때문에, 여러 기능이 시스템 자원을 공유한다. 이로 인해 자원의 동시 접근이나 충돌 문제가 발생할 수 있다.
2. 계층적 접근(Layered Approach)
이 구조는 계층별로 구성된 모듈들이 서로 상호작용하며 운영체제의 기능을 제공하고 각 계층은 하위 계층이 제공하는 연산만을 통해 상위 계층에게 추상화된 인터페이스를 제공한다. 이때 계층적 접근 구조에서 가장 상위 계층은 유저 인터페이스이고 가장 하위 계층은 하드웨어이다.
계층적 접근 구조의 장점은
1. 모듈화와 추상화
각 계층은 자체적인 역할을 수행하므로 시스템이 모듈화되고 각 계층의 독립성이 높아진다. 이는 시스템의 이해도를 높이고 개발과 유지보수를 용이하게 만든다.
2. 유연성과 확장성
새로운 기존 기능을 수정하기 위해 하위 계층을 변경하지 않고도 상위 계층을 개선할 수 있다.
3. 시스템의 복잡성 관리
계층적 구조는 복잡한 시스템을 단순화하여 관리할 수 있다. 각 계층은 자신의 범위 내에서 동작하므로 시스템의 복잡성이 분산되고 제어가 용이해진다.
반면에 단점은
1. 오버헤드
계층 간의 인터페이스와 데이터 교환이 추가적인 오버헤드를 발생시켜 성능이 저하될 수 있다.
2. 제한된 성능 최적화
한 계층의 기능을 최적화하더라도 다른 계층에 영향을 주지 않는다. 이로 인해 전체 시스템 성능 최적화에 제한이 생길 수 있다.
3. 기능의 중복
특정 기능이 여러 계층에서 중복되어 구현되면 메모리 및 자원 낭비가 초래될 수 있다.
계층적 접근 구조는 컴퓨터 네트워크와 소프트웨어 개발 프로세스 등에서도 사용된다.
3. 마이크로커널(MicroKernels)
마이크로 커널은 운영체제의 핵심 기능을 최소한의 규모로 구현한 커널이다. 이러한 커널은 가장 기본적인 기능만을 제공하고, 다른 운영체제 서비스 및 기능은 주로 별도의 주소공한에 존재하는 사용자 레벨의 프로세스 또는 서버 형태로 실행된다.
마이크로커널의 장점은
1. 유연성
새로운 서비스를 추가하거나 기존 서비스를 변경하기 위해 전체 커널을 수정할 필요가 없다.
2. 신뢰성과 안정성
마이크로커널은 작고 간결한 구조를 가지며, 중요한 기능만을 내장하므로 시스템의 신뢰성과 안정성을 향상시킬 수 있다. 커널의 작은 규모로 인해 버그와 결함을 줄일 수 있고, 각 서비스는 독립된 프로세스나 서버로 실행되므로 오류가 전체 시스템에 영향을 미치지 않는다.
3. 보안성
각 서비스 간의 통신이 제한된 인터페이스를 통해 이루어지기 때문에 악의적인 접근을 통제해 보안성이 높다.
반면에 단점은
1. 성능 저하
마이크로 커널은 서비스 제공자와 사용자 간의 통신 메커니즘을 이용하므로 추가적인 오버헤드가 발생할 수 있다.
2. 설계와 구현의 복잡성
마찬가지로 서비스 제공자와 사용자 간의 인터페이스를 통해 운영체제를 구성하므로 설계와 구현의 복잡성이 증가한다.
3. 성능 최적화 제한
아무리 커널의 성능을 높인다고 해도 전체 서비스의 성능이 높아지지는 않는다.
추가 내용
- Processing unit은 control unit과 arithmetic/logic unit을 가지고 있다.
- Memory는 데이터와 명령어를 저장한다.
- 폰노이만 시스템에서 메모리는 자신에게 할당되는 데이터가 무엇인지 알 수 없다.
- 레지스터는 프로세서 코어의 일부이다.
- 멀티-쓰레드는 단일 코어 시스템에서도 동작한다.
- 사용자 프로그램이 자체적으로 생성할 스레드 수를 인식한다.
- 커널 프로그램과 사용자 프로그램이 모두 메인 메모리에 위치함으로써, 운영체제는 하드웨어와 사용자 간의 상호작용을 지원하고 관리할 수 있다.
- 인터럽트는 현대 운영체제 전반에 있어서 비동기 이.벤트를 다루는데 사용된다.
- Device driver는 소프트웨어이다.
- 인터럽트 벡터는 프로세서의 아키텍처에 따라 다르다.
- 운영체제는 시스템 호출에 대해 서로 다른 API를 제공한다.
- 시스템 콜이 불릴 때, 유저모드에서 커널모드로 전환된다.
'학교공부 > 운영체제' 카테고리의 다른 글
[운영체제] Synchronization Examples (0) | 2023.04.24 |
---|---|
[운영체제] Synchronization tools (0) | 2023.04.24 |
Excercise 2. Process Management (0) | 2023.04.23 |
[운영체제] CPU 스케줄링(CPU Scheduling) (0) | 2023.04.23 |
[운영체제] 프로세스(Process) (0) | 2023.04.23 |