KOCW - 운영체제(이화여대 반효경 교수)
2장 컴퓨터시스템의 구조
CPU를 운영체제가 사용할 경우 : 사용할 기계어들을 미리 정의해놨기 때문에 CPU를 안전하게 사용한다는 보장이 있다.
CPU를 사용자 프로그램이 사용할 경우 : CPU가 사용자 프로그램에 넘어가면 운영체제는 통제할 수가 없다 -> 사용자 프로그램이 CPU를 어떤 식으로 활용할지 알지 못함(악용할 가능성 있음
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
CPU의 독점을 방지하기위한 부가적인 하드웨어
일정시간 간격으로 타이머 인터럽트를 발생시킴
타이머 인터럽트로 인해 다른 프로그램에게 CPU를 넘겨주게 됨
사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
CPU에 인터럽트 라인이 생성되어 다음 기계어를 실행하기전에 CPU 제어권을 운영체제에 자동으로 넘어가게 하는 것
인터럽트 벡터 : 주소에 대한 포인터, 인터럽트의 처리 루틴 주소를 가지고 있음. 해당 주소에 가면 요청에 대한 처리를 위한 기계어가 정의되어있음(인터럽트 처리 루틴)
모든 I/O 장치를 전담하는 작은 CPU, I/O 장치의 I/O 완료 후 CPU에 인터럽트를 거는 역할
Device driver : CPU가 I/O장치의 로컬 버퍼에 전송하는 기계어(CPU가 수행하는 코드)
펌웨어 : Device Controller에서 수행되는 코드, 하드웨어의 제어와 구동을 담당하는 일종의 운영체제
하드웨어 장치들이 인터럽트를 거는 경우
인터럽트 라인 세팅 -> 시스템 콜(좁은 의미의 인터럽트, trap)
Exception - 사용자 프로그램 오류 발생
synchronous란?
서로 다른 상태를 같은 상태로 만드는 것. 올림픽 종목중 synchronized swimming을 생각하면 이해가 쉽다.
❗ 동기의 의미는 적용되는 개념에 따라 의미가 조금씩 달라짐
동기식 입출력의 과정
동기식 입출력은 I/O 의 결과에 따라 CPU를 할당하는데 비동기식 입출력은 이와 무관하게 CPU를 할당한다.
비동기식/동기식 입출력 모두 인터럽트를 통해 I/O 완료 여부를 알리게 된다
고속 I/O 장치(속도가 빨라서 인터럽트를 자주 걸게 됨)를 사용하면서 인터럽트가 과도하게 걸리면 발생하게 되면?
I/O를 전담하는 기계어를 두는 방법
메모리 주소를 I/O장치에게도 매겨놓는 방법 : 메모리 접근을 하는 기계어를 통해서 I/O를 하는 방식
프로그램 파일을 실행(File system) -> 프로그램이 메모리에 올라가서 프로세스가 됨(Physical memory)
File system과 Physical memory 사이에 있는 프로그램 실행 단계
프로그램 실행시에 프로그램에게 할당되는 독자적인 Address space
virtual memory - physical memory 간 주소 변환(Address space)이 필요함
code, data, stack으로 구성이 됨
커널 또한 code, data, stack의 구조를 가짐
code : 시스템 콜 및 인터럽트 처리 코드, 자원 관리를 위한 코드
data : 모든 하드웨어들의 자료구조, 모든 프로세스들을 관리하기 위한 자료구조(Process Controll block, PCB, 프로세스당 한개)
stack : 커널의 스택은 각 프로세스마다 별도로 두고 있다.
사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 실행파일에 포함되어 있음
커널 함수 : 운영체제 내에 존재하는 함수(커널의 code) 이 함수를 호출하는 것이 시스템 콜
❗ 프로그램 실행 과정