운영체제
운영체제란 컴퓨터에서 항상 실행되는 프로그램(커널)이다.
운영체제와 관련되어있지만, 반드시 커널의 일부분일 필요가 없는 시스템 프로그램
시스템 작동과 관련되지 않은 모든 프로그램인 응용 프로그램
컴퓨터 시스템의 구성
하나 이상의 CPU와 구성요소와 공유 메모리 사이의 엑세스를 제공하는 버스를 통해 여러 장치 컨트롤러로 구성된다.
각 장치 컨트롤러는 특정 유형의 장치를 담당한다.(디스크 드라이브, 오디오 장치 등등)
장치 컨트롤러는 일부 로컬 버퍼 저장소와 특수 목적 레지스터 집합을 유지 관리.
장치 컨트롤러는 제어하는 주변 장치와 로컬 버퍼 저장소 간에 데이터를 이동한다.
운영체제에는 장치 컨트롤러마다 장치 드라이버가 존재.
장치 드라이버가 장치 컨트롤러의 작동을 잘 알고 있고, 나머지는 운영체제에 장치에 대한 일관된 인터페이스를 제공한다.
CPU와 컨트롤러는 병렬로 실행되어 메모리 사이클을 놓고 경쟁한다.
인터럽트
장치 드라이버는 장치 컨트롤러의 적절한 레지스터에 값을 적재.
컨트롤러는 장치에서 로컬 버퍼로 데이터 전송을 시작. (각 디바이스에서 컴퓨터로)
데이터 전송이 완료되면 장치 컨트롤러는 장치 드라이버에게 작업이 완료되었음을 알림.
장치 드라이버는 읽기 요청이면 데이터 또는 데이터에 대한 포인터를 반환, 운영체제에 제어를 넘김
각 컨트롤러는 장치 드라이버에게 작업을 완료했다는 사실을 인터럽트로 알림.
인터럽트 과정
CPU 하드웨어에는 인터럽트 요청 라인이라는 라인이 있다.
CPU는 매 사이클마다 해당 라인에 요청이 있는지 없는지 검사를 함.
만약 있다면, 인터럽트 번호를 읽어내고 인터럽트 핸들러를 호출한다.
인터럽트 번호와 인터럽트 핸들러의 포인터를 저장한 것을 인터럽트 벡터라고 하고, 이 인터럽트 벡터들의 테이블을 인터럽트 벡터 테이블이라고 한다.
따라서 인터럽트 벡터 테이블에 접근해서 인터럽트 핸들러를 호출하는 것
하지만 인터럽트 벡터의 주소 개수보다 많은 장치가 필요할 수 있다.
이 문제를 해결하는 일반적인 방법은 인터럽트 체인을 사용하는 것
인터럽트 벡터의 각 원소는 인터럽트 핸들러 리스트의 헤드를 가리킨다. 인터럽트를 처리할 수 있는 핸들러가 나타날 대까지 힌들러가 하나씩 호출 됨.
입출력 구조
직접 메모리 엑세스
•
CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송하는 것
원래는 장치와 메모리의 통신이 장치
인터럽트
CPU , 장치
로컬 버퍼
메모리 였지만,
이렇게 하면 장치와 메모리가 직접 소통함으로써 그 동안에 CPU는 다른 작업을 할 수 있다.
컴퓨터 시스템 구조
단일처리기, 다중 처리기
코어
•
명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소
다중 처리기 시스템
•
여러 프로세서가 하나의 작업에 협력할 때 모든 프로세서가 올바르게 작동하게 유지하는데 일정 양의 오버헤드가 발생함 → 따라서 코어가 N개가 됬다고 무조건 N배 빨라지는 것이 아니다.
SMP
각각 자체 CPU를 가지는 두 개의 프로세서가 있는 일반적인 SMP이다.
개별 또는 로컬 캐시 뿐만 아니라 자체 레지스터 세트가 존재
장점
•
많은 프로세스를 동시에 실행할 수 있다는 것
•
N개의 CPU가 있으면 성능을 크게 저하하지 않으며 N개의 프로세스를 실행ㅎ 가능
CPU가 독립적이기 때문에 하나는 유휴 상태이고 하나는 과부하가 걸려 비효율적일 수 있다.
프로세서가 특정 자료구조를 공유하는 경우 비효율성을 피할 수 있음.
위 그림은 다중 코어 시스템을 얘기한다.
칩 내 통신이 칩 간 통신보다 빠르기에, 단일 코어 여러 칩보다 효율적일 수 있다.
각 CPU가 칩 하나에 올라가는 L2 cache를 공유한다.
운영체제의 작동
컴퓨터의 전원을 키거나 재부팅 할 때와 같이 컴퓨터를 실행하려면 초기 프로그램을 실행해야 함.
초기 프로그램 또는 부트스트랩 프로그램은 주로 컴퓨터 하드웨어 내에 펌웨어로 저장된다.
부트스트랩 프로그램은 운영체제를 적재하는 방법과 해당 시스템 실행을 시작하는 방법을 알아야 함.
즉 부트스트랩 프로그램이 운영체제 커널을 찾아 메모리에 적재시켜야한다.
커널이 적재되어 실행되면 서비스를 제공할 수 있다.
일부 서비스는 커널 실행동안 항상 같이 실행되야하는 시스템 데몬이 되기 위해 부팅할 때 메모리에 적재되는 시스템 프로그램에 의해 커널 외부에서 제공됨
다중 프로그래밍과 다중 태스킹
다중 프로그래밍은 CPU가 항상 한 개의 프로그램을 실행할 수 있도록 하여 CPU 이용률을 높인다. 다중 프로그램 시스템에서 실행 중인 프로그램을 프로세스라고 함.
다중 태스킹은 다중 프로그래밍의 논리적 확장. CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 자주 발생하여 빠른 응답시간을 제공한다. 이를 위해 운영체제는 프로그램의 일부만 메모리에 올려놓는다. 이것을 가상 메모리라고 하는데, 이 방법은 프로그램이 물리 메모리의 크기보다 더 커도 된다는 것.
또한 가상 메모리는 프로그래머가 사용하는 논리 주소와 컴퓨터의 물리 메모리로부터 분리 시킨다.
이중 모드와 다중 모드의 운용
사용자 모드와 커널 모드로 나뉜다.
시스템 부트 시, 하드웨어는 커널 모드에서 시작함.
운영체제가 적재되고 사용자 모드에서 사용자 프로세스가 시작됨.
트랩이나 인터럽트가 발생할 때마다, 하드웨어는 사용자 모드에서 커널모드로 전환.