It is just my opinion, so don't you attack me. please!
But if this posting has some incorrect informations, you comment about that
Please!!
포스팅하기에 앞서 device driver에 대한 설명이 필요할 것 같습니다.
특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램이다. 컴퓨터를 구성하는 다양한 입출력 장치마다 각각 장치드라이버가 프로그램 되어 커널에 통합되어 실행된다.
출처: wikipedia
· 표준 API - device driver는 커널의 일부분으로 동작하는 프로그램이므로 무언가 응용 프로그램이 동작하기 위해서는 명령어가 같아야겠죠? 대표적으로 많이 실행하는 Open, Close, Read, Write, Seek등의 함수들이 있습니다. 이 명령어를 일치시키기 위한 표준 ! 그것이 표준 API인 것입니다. 즉 응용프로그램과 커널에 있는 device driver와의 interface역할을 하는 것이죠.
· H/W interface - 응용프로그램으로 부터 API를 통해 명령을 전달받은 device driver는 H/W interface를 통해 하드웨어가 알아들을 수 있는 명령을 번역하여 controller에 전달을 하게 됩니다.
항상 polling의 문제는 기다리면서 상태를 체크해야한다는 것이다. 이것은 CPU의 낭비를 초래한다.
· 위의 그림에 대략적인 루틴을 다 적어놨기 때문에 그림에 대한 설명은 안하는 것이 좋을 것 같습니다.
· 여기서 가장 중요한 포인트는 5번인데요, Interrupt가 일어날 때, CPU가 다른 프로그램에 할당되어 있다가 I/O interrupt를 처리하기 위해 I/O process에 할당을 되게 됩니다.
시스템 보호의 필요성
· 만약 커널영역과 유저영역의 구분이 없다면 어떻게 될까요? 만약 저도 모르는 사이에 악의적인 프로그램이 설치되어 실행된다면, 시스템이 엉망이 될 수도 있겠죠. 이런 경우를 막기위해 시스템을 보호할 필요성이 있게 되었습니다.
· 하드웨어(불법 I/O)에 대한 보호: 보호를 위해 CPU의 모드 비트, 즉 User mode, Kernel mode 이 두가지 모드가 생기게 되었습니다. 이에따라 User Application에서 System call 같은 OS 코드영역의 명령어가 실행되는 경우 Kernel mode의 특권이 필요하게 됩니다. 특권이 없는 User Application의 경우는 오작동을 일으키겠지만, 이 것이 시스템의 안정성을 위해 좋다는 것입니다.
· 메모리 보호: Base, Limit 레지스터를 두어 메모리의 접근 범위를 지정하는 방법입니다.
· CPU 보호(무한 루프): 타이머 또는 클럭으로 고정된 빈도로 인터럽트를 발생시켜서 무한루프를 방지 시킵니다.
용어 정리
· 부트스트래핑(부팅을 하는 방식): ROM에 약간의 코드, MBR은 디스크의 0번 섹터에 존재 이 롬로더가 DMA를 실행 Bootstrap-Roader의 첫 번째 블록을 적재 → 이 첫 번째 블록으로 점프하고 MBR은 역할을 끝냄 → 첫 번째 블록이 수행되면서 부트스트랩 로더의 나머지 부분 적재 → 자신은 메모리의 상위 장소로 옮긴 후 kernel을 하위 기억 장소에 적재
· 캐시(메모리와 CPU 사이의 속도 완충): cache안에는 레지스터로 구성됨. 메인메모리가 느리기 때문에 캐시를 사용한다. 알고리즘에 따라 캐시에서 데이터를 갖고 있을 확률은 90%이상 개선이 가능하다.
· Kernel(OS의 핵심 부분): 주로 자원 관리 및 자원 사용에관한 서비스, 시스템 호출 형태로 제공
· 시스템 호출 POSIX : 프로세스 제어, 파일 조작, 주변장치 조작, 정보관리, 통신
· Asynchronous & synchronous for I/O: 비동기의 경우 I/O를 시작하고 바로 계속 프로세스를 실행하고 종료를 알리는 callback함수가 존재하여 이벤트 발생시 알려준다. 동기의 경우 I/O를 시작한 후, sleep 상태에 빠지고 CPU 할당을 해제 당한다.
· Slow Interrupt를 위한. top-half & bottom-half: H/W interrupt는 비동기적이므로 여러 개가 동시에 Interrupt를 보낼 수 있다. 따라서 이과정중 급한 Interrupt와 그렇지 않은 Interrupt를 구분하여 급한 부분을 먼저 처리하고 그렇지 않은 부분을 나중에 처리하는 방식이다. top-half의 시간이 길면 무시되는 Interrupt가 많아지기 때문에 top-half는 되도록 짧게 설정해야한다.
· 모노리틱 커널: 커널이 하는 모든 기능을 내부에 포함. 계층 구조를 따름, 장점: 이식에 유연하고 용의 함, 또한 시스템 호출 서비스가 빠름, 단점: 인터럽트 처리기가 커널 내부에 있어서 커널 전체가 recompiling되어야 함.
· 마이크로 커널: 시스템 호출, 인터럽트 처리에 필요한 것만 가지고 있음. 나머지는 사용자 프로세스로 존재 인터럽트로 처리를 함. 잠점: 유연성이 좋고 소형의 내장형 시스템에 활용하기 유리, 우선 순위에 따른 실사건 프로세스의 수행 기회가 많아진다. 단점: 파일 서비스 등에서 프로세스가 메시지가 빈번해져 속도가 하락.