1. Operating System이란
- 컴퓨터가 잘 동작하도록 도와주는 프로그램입니다.
- OS는 프로세스(쓰레드 또한 포함) H/W 자원을 분배하고 프로세스들 사이의 충돌을 관리합니다. 이를 위해 프로세스들은 반드시 OS가 가진 규칙을 지켜야합니다. 예를 들어 프로세스가 System Call 파라미터 형식을 지키면 해당 기능을 보다 손 쉽게 사용할 수 있습니다.
- 비유를 들어 설명해봅니다. 국가(OS)는 국민들에게 (Process) 도로, 항공, 군대, 치안 등을 (Resource) 제공함으로 국민들은 편리하게 그리고 충돌 없이 생활 할 수 있습니다. 하지만 국미들은 반드시 국가가 가진 법(ex > system call parameter rule)을 준수 해야합니다.
OS 역할
- Resource Scheduling
- Process 관리
- Memory 관리
- I/O 관리
- Deadlock, Memory Trap 등 에러 관리
3. 비선점형과 선점형의 차이
[1] 비 선점형
한 프로세스가 제어권을 선점하고 있으면 스스로 제어권을 양보하지 않는 이상 다른 프로세스가 실행 할 수 없습니다. 선점형보다 스케줄러 호출 빈도수가 적어 Context Switching 오버헤드가 적습니다. 하지만 응답성이 매우 낮아 현대 OS에서는 거의 사용하지 않습니다.
예를 들어 어떤 작업 소요시간이 1분이면 다른 모든 프로세스들은 1분동안 대기하는 크리티컬한 문제가 발생합니다.
[2] 선점형
한 프로세스가 제어권을 선점하고 있어도 다른 프로세스가 제어권을 강제로 점유할 수 있습니다. 비선점형보다 스케줄러 호출 빈도수가 많아 Context Switching 오버헤드가 더욱 발생합니다. 하지만 응답성이 비선점형보다 빨라 현재의 OS는 선점형 방식을 채택합니다.
하지만 많은 프로세스들이 동시에 리소스에 접근할 수 있어 동기화 문제가 발생할 수 있습니다. 동기화 문제를 해결하는 다양한 방식이 있는데, 이때 동기화된 자료에 접근하는 동안 Interrupt가 불가능하도록 하는데 이 Critical Section 영역은 짧게 설계해야 합니다.
4. sync & blocking
- synchronous : 작업을 요청한 후 반환 시점에 작업이 완료되있습니다. 즉, 작업을 요청하고 대기하다가 끝나면 반환 요청을 받습니다. 순서에 의존합니다.
- asynchrounous : 작업을 요청한 후 반환 시점에 작업이 완료되기를 기다리지 않고, 추후에 인터럽트와 같은 방식으로 별도의 방법으로 통지 받습니다. 순서에 의존하지 않습니다.
- blocking : 작업을 요청하고 완료될때까지 대기합니다.
- non-blocking : 작업을 요청하고 다른 일을 하다 특정 신호에 의하여 결과를 리턴 받습니다. 대기하지 않습니다.
5. Interrupt
CPU에 마련된 특별한 핀에 시그널이 들어오면 CPU가 하던 작업을 중단하고 지정된 주소로 이동합니다. 이동한 주소에서 작업을 수행하고 돌아오는 특별한 메커니즘을 수행합니다. 부팅 시 인터럽트 벡터와 인터럽트 서비스 루틴 주소를 미리 설정합니다.
- SW Interrupt : System Call, Divide 0과 같은 예외처리, 스케줄링이 일어날때 발생합니다.
- HW Interrupt : I/O, 다른 HW와 정보를 교환 할때 사용합니다.
처리 과정
- CPU 특정 핀에 시그널 발생
- 진행 프로세스의 정보 Context를 커널 스택에 푸시
- 인터럽트 벡터로 넘어가 인터럽트 서비스 루틴 실행
- 커널스택에 저장했던 것 pop
- 유저 모드로 전환 후 다음 명령 진행
6. System Call
운영체제는 User / Kernel 모드로 나누어 구동합니다. 파일을 읽거나 쓰거나 화면에 메시지를 출력하는 등 많은 부분이 커널모드에서 동작합니다. 반면 많은 어플리케이션은 사용자 모드에서 동작합니다. 사용자 모드에서 시스템 콜을 호출하면 커널 영역의 기능을 사용할 수 있습니다. 시스템 콜 호출 시 User 모드의 Context를 커널 스택에 푸시하고 커널 모드의 기능을 수행합니다. 이후 작업이 완료되면 스택에서 pop하여 이전 Context로 Switching합니다.
System Call 에서 메시지 전달 방법
- 파라미터를 레지스터에 넣어 전달합니다. 당연히 파라미터의 갯수, 길이 제한이 있습니다.
- 매개변수들은 메모리에 넣고 메모리의 주소를 레지스터에 넣어 전달합니다. 메모리 접근이 있어 속도는 조금 느리지만 파라미터의 갯수나 길이에 제한이 없습니다.
7. Cache Memory
캐시는 속도가 빠른 장치(레지스터)와 느린 장치간의(메모리) 병목 현상을 줄이기 위한 메모리입니다. 메모리에서 사용하던 일부 데이터를 캐시 메모리에 적재하고, 이후 해당 데이터를 메모리로 접근 하는 것이 아닌 캐시 메모리로 접근합니다. 이때, 캐시의 성능은 CPU가 이후에 참조할 쓸모 있는 데이터가 얼마나 캐시에 있냐에 의존합니다. 이때, 적중률을 높이기 위해 구역성 원리를 이용합니다. 보통 프로그램은 모든 코드나 데이터를 균등하게 접근하지 않기 때문에 아래와 같은 구역성 이론을 활용합니다.
- 시간 구역성 : 최근에 참조한 주소의 내용은 곧 이어 다시 참조 될것 같다.
- 공간 구석성 : 참조된 인접 주소의 근처 주소는 참조 될것 같다.
- ? 캐시 메모리는 탐색이 잦기 때문에 HashMap을 활용하여 구현합니다.
※ PC Booting order