CS/운영체제

Week 2: 시스템 구조 및 프로그램 실행

호프 2023. 10. 18. 23:49

Mode Bit

Mode Bit: 하드웨어적으로 두 가지 operation 지원

  • Mode Bit == 1 : 사용자 모드 - 사용자 프로그램 수행
  • Mode Bit == 0 : 모니터 모드 (= 커널 모드, 시스템 모드) - OS 코드 수행, System call 수행
  • 보안과 관련된 중요한 명령어는 모니터 모드에서만 수행 가능한 특권명령
  • Interrupt나 Exception 발생 시 하드웨어가 Mode Bit를 0으로 바꿈
  • 사용자 프로그램에게 CPU를 넘기기 전에 Mode Bit를 1로 바꿈

Timer

Timer

  • 타이머 시간이 0이 되면 타이머 인터럽트를 발생시켜서 운영체제에 제어권이 넘어가도록 한다.
  • CPU를 특정 프로그램이 독점하는 것으로부터 보호
  • Time sharing을 구현하거나 현재 시간을 계산할 때 사용

Device Controller(장치 처리기)

I/O Device Controller

  • 특정한 I/O Device를 관리하는 일종의 작은 CPU (hardware)
  • control register, status register, local buffer를 가진다.
  • I/O 작업이 끝나면 하드웨어 인터럽트를 발생시킨다.

Device Driver(장치 구동기)

  • 각 I/O Device별 처리 루틴이 담겨있는 OS 코드 (Software)

입출력(I/O)의 수행

  • 모든 입출력 명령은 특권 명령
  • 사용자 프로그램의 시스템 콜 -> Trap 발생 -> 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동 -> 올바른 I/O 요청인지 확인 후 수행 -> I/O 작업 완료 후 제어권을 시스템콜 다음 명령으로 이동

Interrupt

인터럽트가 발생한 시점의 레지스터와 Program Counter(PC)를 save한 후 CPU 제어를 인터럽트 처리 루틴에 넘긴다.

  • Interrupt (하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
  • Trap (소프트웨어 인터럽트) 
    • Exception - 프로그램이 오류를 범한 경우
    • System call - 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러): 해당 인터럽트를 처리하는 커널 함수

- Trap의 예시: 프로세스가 자식 프로세스를 생성할 때 디스크에서 데이터를 읽기 위해 발생한 인터럽트
- 하드웨어 인터럽트가 즉시 발생하는 경우: 프로세스의 CPU 할당 시간이 끝났을 때, 디스크의 파일 읽기 요청에 대한 처리가 완료되었을 때

System Call

System Call: 사용자 프로그램이 커널 함수를 호출하는 것

  • Trap 발생 -> Mode Bit = 0 으로 세팅됨

동기식 입출력과 비동기식 입출력

동기식 입출력 (Synchronous I/O)

  • 입출력 작업이 완료된 후에 제어가 사용자 프로그램으로 넘어감

비동기식 입출력 (Asynchronous I/O)

  • 입출력 작업이 끝나는 것을 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

두 경우 모두 I/O의 완료는 인터럽트로 알려준다.

DMA (Direct Memory Access)

  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • block 단위로 인터럽트 발생
  • 빠른 입출력 장치를 메모리에 가까운 속도로 독립적으로 처리하기 위해 사용

I/O 입출력 명령어

  • I/O를 수행하는 special instruction: I/O 장치마다 특별한 명령어를 사용
  • Memory Mapped I/O: 메모리 접근 instruction 사용
    • 입출력을 위한 고유한 instruction을 두지 않고 입출력 장치에 메모리 주소를 연장해서 할당한 후 메모리 접근 instruction을 통해 입출력을 수행하는 방법

저장장치 계층 구조

Primary (Executable)

  • volatile(= temporary), speed & cost ⬆️, size ⬇️
Register
Cache Memory
Main Memory (DRAM)

 

Secondary

  • non-volatile, speed & cost ⬇️
Magnetic Disk (SSD)
Optical Disk
Magnetic Tape

 

Caching

  • 상대적으로 더 빠른 저장장치에 데이터를 복제해놓고 동일 데이터 재사용 시 빠르게 서비스하는 방법
  • 저장장치 계층 간의 속도 차이를 완충하기 위해 사용

프로그램의 실행 (메모리 load)

File System 안에 실행 파일 A가 있을 때,

Virtual Memory 안에 프로세스 A의 address space가 만들어짐 - stack, data, code 정보 저장

  • stack: 동적 할당 데이터, local, stack data
  • data: static, global 데이터
  • code: 컴파일된 코드

Address translation을 통해서 Physical memory 혹은 Swap area에 저장됨

  • Swap Area: 메모리를 block 단위로 잘라서 사용하지 않는 메모리는 하드 디스크에 저장해놓았다가 사용할 때 실시간으로 불러옴

Kernel Address Space

  • Virtual Memory 사용 X
  • Stack: 프로세스 별 커널 스택
  • Data: 프로세스 별 PCB (Process Control Block), 시스템 자원 control - CPU, mem, disk
  • Code: 시스템콜, 인터럽트 처리 코드, 자원 관리 혹은 편리한 서비스 제공을 위한 코드

사용자 프로그램이 사용하는 함수

함수 (Function)

  • 사용자 정의 함수: 자신의 프로그램 안에서 정의한 함수
  • 라이브러리 함수: 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수, 프로그램의 실행 파일에 포함되어 있다.
  • 커널 함수: 운영 체제 프로그램의 함수, 호출하기 위해서는 시스템 콜을 해야 한다.

사용자 정의 함수와 라이브러리 함수는 해당 프로세스의 Address Space 안의 Code 영역에 저장되어 있고, user-mode(사용자 모드)에서 작동하는 반면, 커널 함수는 Kernel Address Space의 Code 영역에 저장되어 있고 커널 모드에서 작동한다.