Chapter 2. Operating System Structures

송승윤·2025년 10월 15일

운영체제 정리

목록 보기
1/10

Interrupts

What OS Do?

운영체제는 프로그램과 하드웨어 사이 중개자의 역할
하드웨어는 interrupt를 통해 운영체제에게 신호를 보냄

Device Controller

디바이스 컨트롤러는 system bus와 device 사이에 위치해 장치를 제어
운영체제는 각 컨트롤러에 대한 디바이스 드라이버를 가짐

Intterupt

장치 컨트롤러는 CPU에 작업 완료를 알리기 위해 interrupt를 발생시킴
interrupt 유형에 따라 interrupt vector를 기반으로 핸들러가 호출됨

Intterupt Vector

intterupt vector는 OS가 관리하는 데이터 구조
intterupt 유형에 따른 함수의 주소를 디바이스에 제공

(대충 이런거임)

Intterupt types

Hardware interrupt
하드웨어 이벤트에 대한 응답으로 발생함
IRQ와 같은 외부 하드웨어 장치에 의해 신호가 발생됨

Software interrupt
소프트웨어 이벤트에 대한 응답으로 발생함
특정 명령 시행시 프로세서 자체에서 요청됨

System Calls

System Calls Definition

OS가 제공하는 서비스에 대한 프로그래밍 인터페이스
보통 C 또는 C++와 같은 하이레벨 언어로 작성됨

대충 이 위치임

유저가 시스템 콜을 호출하면 trap을 만들어서 kernel mode로 진입함
할거 다하면 user mode로 전환해 결과를 전달함

대부분의 프로그램에서는 저거를 직접 호출하진 않고 하이레벨 API를 통해 호출함

예시로, C에서 printf를 하면 write라는 라이브러리를 통해 내부의 write라는 system call을 호출함

System Calls Implementation

각 system call에는 숫자가 연결되고 이 숫자에 맞춰 인덱싱된 테이블을 system call interface가 유지함

caller는 API만 호출하고 상태와 결과만 받으면 되니 system call 내부 동작에 대해 알 필요가 없음

Parameter Passing

종종 단순한 system call보다 많은 정보가 요구될 때도 있어서 파라미터를 넘겨줘야하기도 함

파라미터 넘겨주는 가장 간단한 방법은 그냥 register에 파라미터를 쌩으로 넘겨 주는거임
근데, 레지스터는 작아서 파라미터의 양보다 레지스터의 용량이 많을 때도 있음

이를 보완하기 위한 방법이 BlockStack
파라미터들은 Block 아님 Stack에 다 넣고 레지스터에는 얘네들의 주소만 저장함
이로써 넘길 수 있는 파라미터 개수 제한이 없어지고 방식이 유연해짐!

Operating System Structure

OS 구조에는 Monolothic, Layered, Microkernel 등이 있음

Monolothic Structure

Original UNIX가 채택한 구조
커널의 모든 기능을 한 파일 안에 때려박은 상남자식 구조
System programs랑 Kernel 두 파트로 구성됨
한 곳에 몰려있다보니 system call interface랑 kernel의 소통 overhead가 적음

Linux는 모놀로식이랑 모듈화된 구조를 스까서 쓴 구조를 가짐

Layered Approach

Low Level(Hardware)부터 High Level(User Interface)까지 한 층씩 구분해놓은 구조
설계, 구현, 디버깅이 쉬움
근데 상대적으로 성능이 좀 떨어짐

Microkernels

많은 기능들을 kernel에서 user space쪽으로 넘긴 구조
메세지 전달을 통해 사용자 모듈끼리 통신함

덕분에 커널 구조가 단순해지고 더 쉽게 마이크로커널을 포트할 수 있음
더 안정적이고 안전함

근데, 커널 공간 통신에 대한 사용자 공간의 성능 오버헤드가 생김

0개의 댓글