core.ewha.ac.kr/publicview/C0101020140311132925816476?vmode=f

 

반효경 [운영체제] 3. System Structure & Program Execution 1

설명이 없습니다.

core.ewha.ac.kr

 

 

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

 

 

 

 

+ Recent posts