System Structure & Program Execution
컴퓨터 시스템 구조

mode bit
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영 체제에 피해가 가지 않도록 하기 위한 보호 장치 필요
- Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원
-
1 사용자 모드: 사용자 프로그램 수행
-
0 모니터 모드: OS코드 수행
-
보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 특권 명령
으로 규정
-
Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿈
-
사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅

특권 명령
CPU가 수행하는 명령에는 일반 명령
과 특권 명령
이 있다.
- 일반 명령: 메모리에서 자료를 읽어오고, CPU에서 계산을 하는 등의 명령이고 모든 프로그램이 수행할 수 있는 명령
- 특권 명령: 보안이 필요한 명령으로 입출력 장치, 타이머 등의 장치를 접근하는 명령으로 항상
운영체제
만이 수행할 수 있다.
커널 모드와 유저 모드
- 커널 모드: 운영체제가 CPU의 제어권을 가지고 명령을 수행하는 모드로
일반 명령
과 특권 명령
모두 수행할 수 있다.
- 유저 모드: 일반 사용자 프로그램이 CPU제어권을 가지고 명령을 수행하는 모드이기 때문에
일반 명령
만을 수행할 수 있다.
Timer
- 타이머
- 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0이 되면 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- 타이머는 time sharing을 구현하기 위해 널리 이용됨
- 타이머는 현재 시간을 계산하기 위해서도 사용
Device Controller
- I/O device controller
- 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- local buffer를 가짐(일종의 data register)
- I/O는 실제 device와 local buffer 사이에서 일어남
- Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
- device driver(장치구동기)
- OS 코드 중 각 장치별 처리루틴 → software
- device controller(장치제어기)
- 각 장치를 통제하는 일종의 작은 CPU → hardware
DMA(Direct Memory Access)
- DMA
- 특정 하드웨어 하위 시스템이
CPU와 독립적으로 메인 시스템 메모리에 접근
할 수 있게 해주는 컴퓨터 시스템의 기능
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- DMA는 source와 destination, 그리고 전송할 바이트수만 주면 알아서 data를 전송
- 모든 data 전송이 끝나면 HW interrupt로 CPU에게 완료를 알려주는 구조
- 바잍 단위가 아니라 block단위로 인터럽트를 발생시킴

입출력(I/O)의 수행
- 모든 입출력 명령은 특권 명령
- 사용자 프로그램은 어떻게 I/O를 하는가?
- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O요청인지 확인 후 I/O수행
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
인터럽트(Interrupt)
- 현대의 운영 체제는 인터럽트에 의해 구동됨
- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.
- 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- 하드 웨어 인터럽트
- 하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 cpu에 어떤 사실을 알려주거나 cpu 서비스를 요청해야 할 경우 발생시킨다.
- 소프트웨어 인터럽트**(= Trap)**
- 소프트웨어(사용자 프로그램)가 스스로 인터럽트 라인을 세팅한다.
- Exception: 프로그램이 오류를 범한 경우
- System call: 프로그램이 커널 함수를 호출하는 경우
- 인터럽트를 발생시키기 위해 하드웨어/소프트웨어는 cpu내에 있는
인터럽트 라인
을 세팅하여 인터럽트를 발생시킨다.
- cpu는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지를 검사한다.
인터럽트 관련 용어
- 인터럽트 벡터
- 인터럽드 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블이다.
- 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러)
- 실제 인터럽트를 처리하기 위한 루틴으로
인터럽트 서비스 루틴
이라고도 한다.
- 운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램되어 있다.
- PCB(Process Control Block)
- 커널의 데이터 영역에 존재하며 각각의 프로세스마다 고유의 PCB가 있다.
- 인터럽트 발생 시 프로세스의 어느 부분이 수행중이었는지를 저장한다.
- (수행중이던 memory 주소, 레지스터값, 하드웨어 상태 ...)
인터럽트 과정
process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.
- process A는
system call
을 통해 인터럽트를 발생시킨다.
- CPU는 현재 진행 중인 기계어 코드를 완료한다.
- 현재까지 수행중이었던 상태를 해당 process의 PCB(Process Control Block)에 저장한다. (수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태 등...)
- PC(Program Counter, IP)에 다음에 실행할 명령의 주소를 저장한다.
- 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(Interrupt Service Routine)로 점프하여 루틴을 실행한다.
- 해당 코드를 실행한다.
- 해당 일을 다 처리하면, 대피시킨 레지스터를 복원한다.
- ISR의 끝에 IRET 명령어에 의해 인터럽트가 해제 된다.
- IRET 명령어가 실행되면, 대피시킨 PC 값을 복원하여 이전 실행 위치로 복원한다.
동기식 입출력과 비동기식 입출력
동기식 입출력(synchronous I/O)
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
- 구현 방법 1
- I/O가 끝날 때까지 CPU를 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음
- 구현 방법 2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
- I/O처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
비동기식 입출력(asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

두 경우 모두 I/O의 완료는 인터럽트로 알려줌
저장장치 계층 구조


커널 주소 공간의 내용

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