컴퓨터 시스템과 구조
컴퓨터 시스템에서 어떻게 하드웨어가 작동하는가?
프로그램들이 이러한 하드웨어 위에서 어떻게 돌아가는가?
1. CPU
CPU는 매 clock cycle마다 instruction (기계어)를 하나씩 읽어서 실행하고 하나의 Instruction을 마치면 Interrupt line을 확인하여 다음 Instruction 수행 여부를 결정한다
- 메모리 : CPU의 작업 공간
- 레지스터 : CPU내에 메모리보다 더 빠르고 정보를 저장할 수 있는 작은 공간들이 있다.
- mode bit: CPU내에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해준다.
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필요
- Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation을 지원한다
1 (사용자 모드) : 사용자 프로그램을 수행한다
0 (모니터 모드) : OS 코드를 수행한다 (운영체제에게 CPU 제어권 할당)
-
- 특권명령 : 모니터 모드 (mode bit = 0)에서만 수행이 가능한 보안을 해칠 수 있는 중요한 명령어
- Interrupt나 Exception 발생 시 하드웨어가 Mode bit을 0으로 바꿈 (모니터/OS 모드)
- 사용자 프로그램에게 CPU를 넘기기 전에 Mode bit을 1로 셋팅함
- Interrupt line : I/O device 작업의 수행 여부 확인하기 위한 장치
- CPU는 항상 메모리에 있는 Instruction만 실행
- A 프로그램으로 CPU 실행중이면, CPU에서 Instruction 실행하다가, disk에서 파일을 읽어오거나, scanf등으로 사용자 입력을 받을 경우?? → I/O device에 접근하는 Instruction CPU가 직접 접근하지 않고 메모리에만 직접 접근한다.
그러므로, I/O device 접근 요청은 Interrupt line에서 device controller에 일을 시킨다.
그러면 Disk는 device controller가 시킨 작업을 수행하고 자신의 local buffer에 저장한다.
그러는 동안에 매우 빠른 속도의 CPU를 낭비하지 않기 위해 메모리 접근만 하다 I/O device 처리를 하게 되면 device controller 에 일을 맡기고 다시 계속 메모리에 접근하여 일을 한다.
근데, 이 프로그램A를 실행하며 Instruction을 실행중일 때, I/O device에서 받아온 결과물에 따라 다른 Instruction을 작동해야 한다. CPU는 빠른 움직이며 직접적으로 I/O device에 접근하지 않고 한 프로그램을 수행하다 더 이상 접근하지 못하게 되면 다른 프로그램으로 넘어가 작업을 한다
- timer : 특정 프로그램이 CPU를 독점하는 것을 막기 위한 하드웨어
- 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어도록 인터럽트를 발생시킴
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0이 되면 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- 타이머는 time sharing을 구현하기 위해 널리 이용됨
- 타이머는 현재 시간을 계산하기 위해서도 사용
- 계속 CPU 사용하는 경우 (무한루프 등) CPU가 다른 프로그램으로 넘어가지 못함 / Time sharing 구현에 실패
여러 사용자 프로그램이 실행되며 그 프로그램에 CPU를 넘겨주는데 그 때 timer에 특정 값(수십 mmsecond정도의 시간)을 세팅한 후 CPU를 넘겨준다 → 특정 timer 시간이 지나면 timer가 CPU에 Interrupt를 건다 → CPU는 하나의 Instruction이 끝나고 나면 Interrupt Line을 확인하여 다음 Instruction을 실행 여부를 결정한다. → Interrupt가 있을 경우 CPU는 하던 작업을 잠시 멈추고 CPU의 제어권이 사용자 프로그램으로부터 운영체제로 자동으로 넘어간다.
운영체제가 CPU를 얻게 되면 다음 프로그램에게 CPU를 넘겨준다 (timer에 일정 시간 setting)
CPU는 메뉴얼에 나온대로만 수행한다.. 다음 작업한 명령어의 주소 (Program Counter) 나타내고 있다. 이러한 전체적인 명령 작업 OS가 관리한다
2. I/O device
- 컴퓨터에 입력하고 출력되는 것들을 다룬다
- Input device: 키보드, 마우스 등
- Output device: 모니터, 출력기 등
- I/O는 실제 device와 local buffer 사이에서 일어남
- Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
- Disk: 해당 Disk에 있는 데이터들을 컴퓨터에 입력하고, 출력되는 데이터들을 다룬다.
3. I/O Device의 구성
- device driver (장치 구동기) : OS 코드 중 각 장치별 처리 루틴 → software
- device controller (장치 제어기) : 각 장치를 통제하는 일종의 작은 CPU → hardware
- 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- local buffer를 가짐 (일종의 data register)
- local buffer : devce controller들의 작은 작업 공간
- CPU와 I/O device는 실행 속도가 매우 차이난다.
- DMA Controller : 직접 메모리에 접근할 수 있는 Controller
4. I/O의 수행
- 모든 입출력 명령은
특권 명령
임 - 사용자 프로그램은 어떻게 I/O를 하는가 ? → 운영체제를 통해서만 I/O device 접근 가능
- 시스템 콜 (Systemp Call) : 사용자 프로그램은 운영체제에게 I/O를 요청한다
- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동한다
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동한다
- 올바른 I/O 요청인지 확인 후 I/O 수행한다 (해당 I/O Device가 접근 권한이 있는가?)
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮긴다
(ex: 어떠한 C 프로그램에서 메인함수에서 함수호출을 하면 CPU에서는 메인 함수에 해당하는 Instruction을 수행하다 호출한 함수 / if 문 만족하지 못할 시 Memory내에서 주소를 점프한다
But, I/O Device 요청 시? mode bit이 1이므로 직접 메모리 구조에 접근할 수 없다.
프로그램이 직접 Interrupt Line을 세팅하는 Instruction 실행
Instruction 을 하나 실행하고 나면 (timer, I/O Controller등이 발생시킨) Interrupt 들어온 것이 있나 확인
프로그램이 운영체제에게 어떤 것을 요청하기 위해 소프트웨어적으로 직접 Interrupt를 발생한다 → mode bit 0으로 → system call!!
I/O 요청 시 소프트웨어 인터럽트로 처리한 후 하드웨어 인터럽트로 처리가 끝났음을 알린다)
즉 I/O의 수행은 소프트웨어 / 하드웨어 인터럽트 모두 필요하다!
5. Interrupt
- 인터럽트
- 인터럽트를 당한 시점의 레지스터와 Program Counter를 저정한 후, CPU의 제어를 인터럽트 처리 루틴에 넘긴다
- Interrupt의 넓은 의미
- Interrupt ( 하드웨어 인터럽트 ) : 하드웨어가 발생시킨 인터럽트 (timer 혹은 I/O Controller)
- Trap ( 소프트웨어 인터럽트 ) :
- Exception : 프로그램이 오류를 범한 경우 (Divide by Zero) 등
- System Call : 프로그램이 커널 함수를 호출하는 경우
- 인터럽트 관련 용어
- 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
- timer가 인터럽트 걸 수 있음
현대의 운영체제는 인터럽트에 의해 구동된다
6. 시스템 콜
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는것 (OS에게 부탁하는 방법
- 사용자 프로그램의 코드가 운영체제의 코드를 직접 수행하는 것이 불가능하다 → Interrupt line 설정 → CPU 제어권 OS로 넘어가서 부탁한 일을 수행할 수 있다.
사용자 프로그램은 본인이 직접 I/O 장치에 접근할 수 없다 → 운영체제를 통해서만 접근할 수 있다!! (보안 같은 이유로)
키보드 입력이 들어오면 device controller가 interrupt를 건다
그러면 CPU 제어권이 OS에게 변함 → 들어온 키보드 입력 값을 키보드 입력 요청한 프로그램 메모리에 복사 → 현재 CPU 사용하던 프로그램이 끝나면 키보드 입력한 프로그램에게 전달
강의 주소
'CS > 운영체제' 카테고리의 다른 글
[OS] Lecture 5. Process Scheduling (1) | 2024.01.24 |
---|---|
[OS] Lecture 4. Thread Management (1) | 2024.01.24 |
[OS] Lecture 3. Precess Management (0) | 2024.01.20 |
[OS/반효경 교수님] 2. System struct & Program Execution 2 (2) | 2023.06.03 |
[OS/반효경 교수님] 1. Introduction to Operation Systems (0) | 2023.05.25 |