core.ewha.ac.kr/publicview/C0101020140311132925816476?vmode=f
mode bit
- 0 일때 os 가 cpu 를 사용
ㄴ 모든 명령을 실행 가능
- 1 일 때 사용자 프로그램이 cpu 를 사용
ㄴ 제한된 명령만 실행 가능
timer
- 운영체제가 사용자 프로그램에게 cpu 를 넘겨줄 때 타이머를 세팅한 후 넘겨줌
- 지정된 시간이 지나면(0이 되면) timer interrupt 가 발생
- interrupt 가 발생되면 cpu 가 운영체제로 넘어옴. os 는 cpu 를 받고 다음 프로그램에게 cpu 를 넘겨주지.
- time sharing 을 구현하기 위해 사용되기도 함
사용자 process 는 io 가 발생하게 되면(사용자 process 가 io device 를 사용하는 함수를 실행함)
process 는 io 디바이스에 접근 권한이 없기 때문에 os 에게 cpu 를 넘겨줌.
이렇게 사용자 process 가 커널에 접근하는 것을 system call 이라고 함.
system call 은 사용자 process 내에서 os 에 해당하는 메모리 영역에 접근(커널 함수 호출)하는 것을 말 함.
근데 os 메모리 영역에는 접근이 불가함(mode 1 이기 때문에) 따라서
process 는 직접 software interrupt(trap 이라고 함) 을 cpu 에 걸어서 os 에게 cpu 가 넘어가게 함.
os 는 해당 interrupt 를 보고 "사용자 process 가 이런 이유 때문에 interrupt 를 걸었구나" 라고 이해하고
process 대신 io 명령을 진행함(이 때 올바른 io 요청인지도 파악함. 예를 들면 이 process 가 권한은 있는지)
그 후 다른 process 에게 cpu 를 넘김. 왜냐면 io를 발생시킨 process 에게 넘기면
io 응답을 기다리는 동안 할 일이 없어서.
io 응답을 하기 위해 io 디바이스는 cpu 에 interrupt 를 검.
os 는 해당 interrupt 가 뭔지 살펴보고, "아 아까 A process 가 요청한 게 도착했군" 이라고 생각함.
그리고 io 디바이스의 응답(결과)를 A process 의 memory 에 넣어줌
만약 os 가 interrupt 를 B process 실행 도중에 받았다면
B process 는 os 에게 cpu 를 잠깐 돌려줌.
os 는 interrupt 처리를 마무리 하고 나서 다시 B process 에게 cpu 를 돌려줌.
os 코드 내에 다양한 interrupt 를 어떻게 처리해야 하는지 이미 적혀 있음
예를 들어 trap 이 걸렸을 때, 키보드 input 이 들어왔을 때, timer interrupt 가 걸렸을 때
각 interrupt 당 어떻게 행동하고 처리해야 하는지 행동 지침(?)이 들어있음.
이걸 interrutpt 처리 루틴이라고 함.
해당 interrupt 를 처리하는 커널 함수임.
그리고 어떤 interrupt 가 생겼을 때 어떤 interrupt 처리 루틴(커널 함수)를 실행해야 하는지
이정표 같은 역할을 하는 것을 interrupt vector 라고 함.
interrupt vector 는 interrupt 처리 루틴의 주소를 갖고 있는 일종의 테이블임.
디바이스 컨트롤러 : 각 디바이스를 통제하는 일종의 작은 cpu.
각 디바이스에 달려있음.
디바이스 드라이버 : os 에서 각 디바이스에 접근할 수 있도록 해주는 드라이버.
(여기서부터는 따로 공부한 내용이라 강의에는 없는 내용)
유저 프로세스에서 인터럽트가 걸리면, 해당 인터럽트에 해당하는 값을 key 로
interrupt vector 테이블을 살펴보고, key 값과 맞는 인터럽트가 처리됨
인터럽트 시 추가적인 정보를 커널에 넘겨야 하는 경우가 발생할 수 있음
이럴 때 CPU 의 레지스터를 사용
즉, 유저 프로세스에서 CPU 레지스터에 정보를 넣은 후,
커널이 CPU 레지스터로부터 정보를 읽고 인터럽트에 반영
만약 정보량이 많아서 레지스터에 들어가지 않는다면,
정보를 저장해 둔 메모리 주소를 CPU 레지스터에 넣어서 커널에 정보를 전달하는 방법도 사용 가능
커널은 해당 메모리 위치 정보를 CPU 레지스터로부터 받고, 해당 메모리로 가서 정보를 읽어 인터럽트에 반영
참고 https://luckyyowu.tistory.com/133
'Linux' 카테고리의 다른 글
[운영체제] 이화여대 반효경 교수님 수업 필기 Process1 (0) | 2020.10.02 |
---|---|
[운영체제] 이화여대 반효경 교수님 수업 필기 System Structure & Program Execution 2 (0) | 2020.09.29 |
[운영체제] 이화여대 반효경 교수님 수업 필기 Introduction to Operating Systems (0) | 2020.09.26 |
[Linux] 이것이 리눅스다 강의 정리 18장 (0) | 2020.09.25 |
[Linux] 이것이 리눅스다 강의 정리 8장 (0) | 2020.09.25 |