반응형
<운영체제 TIL 목록>
1. 운영체제란? 목적? 분류?
2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자.
3. 하드웨어, 메모리 및 메모리 보안 방법?
4. 프로그램의 구조, 실행 시 작동 과정?
5. 프로세스란? 6가지 상태? PCB?
6. 스레드, 멀티스레드란? 프로세스와의 차이?
7. CPU 스케줄링?
8. ''업데이트 예정''
1. 인터럽트를 활용한 운영체제의 하드웨어 및 소프트웨어 관리
- 운영체제는 cpu의 인터럽트(Interrupt) 기능을 활용하여 프로그램들의 cpu 사용 순서 및 I/O 장치 사용을 관리한다. 인터럽트 기능은 cpu가 메모리를 읽으며 Instruction을 실행하는 행위를 방해할 수 있는 유일한 기능이다. cpu는 Instruction을 한줄 실행, 자신의 인터럽트 공간을 한번 살펴보기를 반복한다. 인터럽트 기능을 활용하여 cpu를 제어할 수 있는 경우는 크게 두가지가 있다. 이에 대해 알아보자.
1. cpu 사용 프로그램 변경
- 프로그램이 cpu를 사용하는 시간이 끝났을 경우(할당 받은 사용 시간이 끝났을 경우), Timer controller가 cpu의 인터럽트에 '사용 시간 끝'의 문맥을 가진 인터럽트를 설정한다.
- cpu는 현재 읽고 있던 Instruction을 읽고, 수행 후 인터럽트 라인을 살펴본다. Timer Interupt가 설정돼 있다.
- cpu의 모드비트(mode bit)가 1(사용자 모드=프로그램 내 명령어만 실행 가능)에서 0(커널 모드=커널 내 명령어 실행 가능)로 바뀌어 cpu의 제어권이 커널로 넘어간다.
- 커널은 프로그램의 상태를 유지하기 위해 PCB(program control block) 자료 구조에 프로그램 카운터, 레지스터 상태 등 프로그램 실행 정보를 저장한다.
- 커널이 인터럽트 라인의 내용을 읽고 해당 인터럽트 관련 내용을 수행 하기 위해 무얼 해야할지 판단하기 위해 인터럽트 벡터(인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키는 자료구조)로 이동한다.
- 인터럽트 벡터에서 타이머 인터럽트에 해당되는 코드를 찾는다. 해당 코드를 인터럽트 처리 루틴(Interrupt service routine) 혹은 인터럽트 핸들러라고 부른다. 인터럽트 핸들러에서 타이머 인터럽트에 대한 내용을 커널이 cpu를 가지고 이행한다.
- 다음 차례를 위해 대기하고 있는 프로그램에게 cpu 제어권을 넘겨주고 cpu의 모드비트를 1(사용자모드)로 변경한다.
2. 프로그램이 I/O 장치 사용을 원할 경우
- 프로그램 사용중 I/O 장치를 사용하기 원하는 Instruction이 발생했다고 가정하자.
- I/O 장치에 접근 하는 것은 메모리를 바꿀 수 있는 위험한 일이기에 기본적으로 프로그램이 직접 실행할 수 없다. 따라서 운영체제(커널)이 이를 대리해야한다. 이를 위해 프로그램은 '시스템 콜' 인터럽트를 사용한다.
- 프로그램이 I/O 정보가 필요할 때 시스템 콜을 하여 cpu에 직접 인터럽트를 설정한다.
- 모드 비트가 바뀌고 커널로 cpu 제어권이 넘어간다. cpu는 인터럽트 벡터->인터럽트 처리루틴으로 가서 I/O 관련 코드를 실행한다.
- I/O 장치에서 값을 읽어들이는 작업은 cpu가 Instruction을 실행하는 작업보다 오래 걸리기 때문에 대부분의 경우 cpu는 I/O를 신청한 프로그램을 I/O 장치 대기열에 줄 세워 놓고 돌아와 다른 프로그램을 실행한다.(I/O를 동기, 비동기로 실행에 따라 달라진다.
- I/O 작업은 I/O 컨트롤러가 장치로 부터 값을 읽어들인 후 local 버퍼 내에 값을 저장한다. 이후 I/O 장치 컨트롤러가 cpu에게 인터럽트를 설정한다(혹은 DMA=Device memory controller에게 알린다). 커널로 제어권 변경 후 인터럽트 처리 루틴 후 커널이 cpu를 가지고 I/O 버퍼에 접근하여 값을 가져와 I/O를 신청한 프로그램 내 코드를 변경한 후 방금 하던 프로그램 실행 상태로 돌아온다(극히 드문 경우 우선 순위에 의해 I/O 신청한 프로그램으로 돌아온다).
반응형
'운영체제(OS)' 카테고리의 다른 글
[운영체제] 6. 프로세스란? 5 or 6가지 상태? 스케줄러? (0) | 2022.02.20 |
---|---|
[운영체제] 5. 인터럽트, 문맥 교환(컨텍스트 스위칭), PCB 정의와 차이? (0) | 2022.02.19 |
[운영체제] 4. 프로그램의 구조, 실행 과정? Easy with TMI (0) | 2022.02.18 |
[운영체제] 3. 하드웨어, 메모리 및 메모리 보안 방법? Easy with TMI (0) | 2022.02.16 |
[운영체제] 1. 운영체제란? 목적? 분류? Easy with TMI (0) | 2022.02.15 |