OS-System_Structure
kocw OS 강의(이화여대 반효경 교수님)를 정리하면서 공부하기 위한 게시글 ✍
시스템을 크게 CPU, Memory, I/O device 관점에서 봐보자
CPU 는 해야할 일을 Memory에 올려놓고 하게 되는데, 이때 CPU랑 가까운 registers, memory, I/O device 로 속도가 빠르다
Mode bit
1은 사용자모드, 0은 커널모드로 사용자 프로그램이 CPU를 사용할때는 1로 지정하여 시스템상 중요한 액세스들을 막아놓는다.(I/O 명령같은 것)
Device Controller
I/O 장치를 관리하는 작은 CPU개념, CPU가 매번 I/O Device에 방문할수 없으므로 buffer를 가지고 buffer에 정보저장. => Device Controller가 interrupt로 CPU에 알려줘서 가져감
이때 DMA 라는 Direct Memory Access를 이용해 Device차원에서 메모리에 복사해두고 인터럽트로 알린다.
>Device Driver
>:CPU가 장치를 쓰기위해 쓰는 코드를 담음(software) , 사용설명서가 디바이스에 들어가있으면 펌웨어,
>Device Controller
>:장치통제하는 작은 CPU(hardware)
시스템 콜
사용자 프로그램이 실행되다가 I/O요청과 같은 중요한 요청을 하기위해 운영체제에 함수를 요청하는게 시스템 콜
즉 내가 프로그램을 실행하다가(mode bit 1) ==> I/O를 하기위해선 0에 해당하는 권한이 필요한데 프로그램이 운영체제에 인터럽트 라인을 작성하여 인터럽트를 걸어줄수있다
ex) Disk에서 뭔가를 읽어와라
인터럽트
소프트웨어 인터럽트 == 트랩
:프로그램이 인터럽트 라인을 짜서 CPU로 넘어가는 인터럽트(예외발생도 포함) (시스템 콜 == 트랩을 이용한 인터럽트) ==> 올바른 요청인 경우에 I/O컨트롤러에게 I/O요청을진행
하드웨어 인터럽트(일반적인 인터럽트) - I/O컨트롤러 인터럽트
timer 인터럽트 :CPU를 특정 프로그램이 독점하는 것을 막기위해 사용(time sharing에 이용) timer는 특정 시간이 지나면 OS로 제어권 넘어가게 인터럽트
IO를 위한 인터럽트 과정:
사용자프로그램이 시스템 콜을 이용하여 인터럽트 요청(soft) ==> 인터럽트 벡터의 특정 위치 ==> 인터럽트 벡터가 가리키는 인터럽트 서비스루틴 ==> I/O valid확인후 작업 ==> 일 다했다고 하드웨어가 인터럽트 요청함(hard)
인터럽트 벡터 : 각 인터럽트 종류마다 어디있는 것을 실행시켜야하는지 주소를 정의해놓은 것
인터럽트 서비스 루틴 : 운영체제에 특정 인터럽트 코드가 들어왔을때 처리해야할 것을 매칭해준다 - 커널함수
즉 운영체제는 인터럽트에 의해 구동된다.