두 가지 모드가 존재하는 이유
유저 프로그램을 잘못 수행해서 다른 프로그램이나 운영체제 자체에 피해가 생기는 걸 방지하기 위해 보호 장치를 해둔 것이라고 보면 된다.
두 가지 모드의 구분
1. 유저 모드 : 유저 프로그램을 실행한다. 시스템 데이터에 접근이 제한되며 하드웨어에 직접 접근할 수 없다.
2. 커널 모드 : 모니터 모드라고도 하며 OS 코드나 커널 모드 코드를 실행한다. 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 '특권명령'으로 규정된다. 모든 I/O 명령은 특권 명령이다.
Mode bit
하드웨어적으로 구현된 두 가지 모드의 연산을 지원하기 위해 쓰이는 비트다. 1은 유저 모드, 0은 커널 모드를 나타낸다.
Interrupt나 Exception이 발생하면 하드웨어가 mode bit을 0으로 바꾸고, 유저 프로그램에 CPU를 넘기기 전에는 mode bit을 1로 셋팅한다.
인터럽트를 발생시키는 대상은 다음과 같다.
1. Timer : 정해진 시간이 지나면 OS에 제어권이 넘어가도록 interrupt 발생시켜 CPU를 특정 프로그램이 독점하는 걸 막는다. time sharing을 구현하기 위해 널리 쓰인다.
2. Device Controller : 특정 I/O 장치 유형을 관리하는 일종의 작은 CPU로 I/O 작업이 끝났을 경우 interrupt로 CPU에 그 사실을 알린다.
시스템콜 System call
유저 프로그램이 운영체제의 서비스를 받기 위해서 커널 함수를 호출하는 것을 의미한다. I/O 명령 또한 시스템콜을 통해 처리되는데 구체적인 과정은 다음과 같다.
1. 시스템콜 : 유저 프로그램이 운영체제에게 I/O 요청을 한다.
2. sw interrupt를 이용해 인터럽트 벡터(해당 인터럽트를 처리하는 루틴 주소)의 특정 위치로 이동한다.
3. 제어권이 인터럽트 벡터가 가리키는 인터럽트 처리 루틴(해당 인터럽트 처리하는 커널 함수)으로 이동한다.
4. 올바른 I/O 요청인지 확인한 후에 I/O를 수행한다.
5. I/O 수행 완료되면 제어권을 시스템콜 다음 명령으로 옮긴다.
'CS > 운영체제(OS)' 카테고리의 다른 글
스레드(Thread)란? : 프로세스와의 비교 (0) | 2022.04.20 |
---|---|
프로세스와 프로세스 문맥, 문맥 교환(Context Switch) (0) | 2022.04.19 |
프로세스 주소 공간 : Stack, Data, Code (0) | 2022.04.19 |
동기식 입출력과 비동기식 입출력 (0) | 2022.04.18 |
운영체제 개념, 기능: 인터럽트, CPU 스케줄링, 메모리 관리, 디스크 스케줄링 (0) | 2022.04.17 |