2.1 OS의 목적
- OS의 목적은 사용자의 편리성과 자원의 효율적 사용
2.2 OS 관련 상식
- 부팅 : 전원이 꺼져 있을 때는 운영체제 전부가 디스크에 저장되어 있는데 커널이 메모리에 올라와 실행되어 장치들을 준비시키고 각종 레지스터 값을 초기화하고 사용자의 입력을 받을 준비가 되면 부팅되었다고 한다. 이때 사용되는 것이 부트 프로그램 또는 부츠트랩로더로 ROM에 저장되어 전원이 켜지면 제일 먼저 실행된다.
- 레지스터 : CPU는 여러 개의 레지스터를 가지고 있는데 이는 메모리보다 빠른 기억장치지만 크기가 작다. 현재 상태 정보를 저장하기 위한 프로그램 상태 워드 레지스터 가짐.
- 명령어 처리 : 메모리에 있는 명령어를 읽어 처리기에 있는 레지스터로 가져오는데 이때 연산을 제어하기 위해 사용되는 레지스터들이 동원되고 이 과정을 반입(Fetch)라 부른다. 반입 후에 하나의 명령어가 처리되고 다음 명령어도 같은 명령어를 반복함으로써 전체 프로그램의 실행이 완료. 다음에 실행해야 할 메모리에 있는 명령어의 주소는 PC 레지스터가 가지고 있다.
2.3 인터럽트
- 인터럽트(Interrupt) : 자원을 효율적으로 관리하기 위해 각 자원의 상황을 알아야 하는데 이 때 일정한 시간 간격을 두고 각 자원의 상태를 주기적으로 확인하는 방식인 폴링이 있다. 폴링의 간격을 적절히 정해야 하고, 각 자원들은 직전 폴링 이후 변화된 자신의 상태를 다음번 폴링 때까지는 알릴 수 없으며 아무 일이 없었는데도 CPU는 폴링에 일정량의 시간을 들여야 하는 부담도 발생. → 인터럽트 = 각 자원들이 능동적으로 자신의 상태변화를 CPU에 알리는 방식
- 인터럽트 : 하드웨어 인터럽트(자원들로부터의 인터럽트), 소프트웨어 인터럽트(실행중인 명령어 때문에 생기는 인터럽트, CPU 자신에게 인터럽트), 트랩(CPU 스스로 자신에게 인터럽트 해야하는 경우)
- 인터럽트가 처리 되는 때 : 하드웨어 인터럽트는 현재 진행 중인 명령어 실행을 마친 후 처리. 트랩은 처리 중인 명령어에 의해 발생된다.
- 인터럽트의 처리 과정 : 장치가 인터럽트 신호를 CPU에 보낸다 → CPU는 명령어를 실행 중이었다면 먼저 이 명령어의 실행을 완료시키고 인터럽트 신호를 확인 → 현재 실행 중이던 프로그램이 인터럽트 처리 후 다시 실행될 때를 위해 현 상태의 정보를 시스템 스택에 저장 → 인터럽트 처리 루틴의 시작 주소를 PC에 넣어 실행시킴으로써 결과적으로 인터럽트 처리 루틴이 실행 → 인터럽트 처리 루틴은 먼저 CPU에 있는 레지스터들의 값을 저장한 후 필요한 인터럽트 처리를 시작 → 인터럽트의 처리가 끝나면 이전에 저장했던 레지스터 값들을 다시 재저장한 후 PSW와 PC값들은 원래 자리에 다시 넣어주고 실행
- 중첩된 인터럽트는 순차적 처리를 하거나 중첩이 가능하도록 현재 처리중인 인터럽트를 잠시 접어두고 다른 인터럽트로 실행을 옮길 수 있도록 하는 방식이 있다.
2.4 기억장치의 계층적 구조
- 속도 = 접근 시간, 가격 = 비트당 단가
- 상위 계층일수록 속도와 가격은 올라가고 하위계층으로 내려갈수록 용량은 커진다.
- 속도가 빠를수록 가격이 비싸고 용량이 클수록 가격은 싸지만 속도가 느리다. CPU에 의해 실행되기 위해 반드시 주기억 장치에 있어야 한다.
2.5 I/O 방식
- CPU의 개입 정도에 따라 세 가지 정도로 분류할 수 있다.
- 입출력 장치는 컨트롤러, 여기에는 CPU와 입출력할 데이터를 저장하는 버퍼가 있다.
- CPU의 개입 정도에 따라
- 프로그램에 의한 입출력 : CPU는 입력 지시 후 한 워드가 컨트롤러의 버퍼에 입력됐는지 계속 확인. 인터럽트가 필요없는 대신 CPU가 지속적 완료 여부 확인→낭비
- 인터럽트에 의한 입출력 : 입력 지시 후 워드의 입력이 이루어지는 사이에 CPU는 다른 작업. 입력 완료시 인터럽트에 의해 알림. 워드만큼의 인터럽트 처리. CPU낭비 없음 but 버퍼의 크기에 비해 입출력할 데이터가 클수록 잦은 인터럽트 처리가 요구되고 바로 일을 이어나갈 수 없다.
- 메모리에 직접 접근하는 입출력(DMA) : CPU는 입출력할 데이터의 시작 주소와 크기 등을 위성 프로세스인 채널에게 알려주고 다른 작업. 시스템에서의 한 번의 입출력 단위인 블록 단위로 CPU에게 인터럽트를 보내 알린다.
- 하드웨어 구성에 따라
- 독립적인 입출력 : 입출력 장치들이 입출력 버스를 통해 CPU와 연결 → 추가 비용, 입출력은 입출력 담당 명령어를 통해 실행하고 입출력 버스를 통해 제어값이 전달된다. 단점 : 입출력 명령어가 명령어 집합에 추가되므로 로직 복잡
- 메모리 주소 지정 입출력 : 입출력 장치들이 메모리와 함께 메모리 버스에 연결, 입출력을 위한 명령어를 따로 두어 사용하지 않음 → 메모리 할당 받음 → 메모리 명령어(MOVE,LOAD) 사용. 장점 : instruction set이 커지지는 않음. 단점 : 주소공간만큼 메모리 사용하지 않음