본문 바로가기

운영체제 정리

이화여대 운영체제 수업 2 강(시스템 구조와 프로그램 실행) 정리

Memory

 

CPU의 작업공간.

매 클럭 사이클마다 기계어를 읽어서 인식을 하게된다.

I/O 작업을 할 때는 CPU를 OS에게 넘겨준다.

 

I/O Device

 

device controller: 작은 CPU 역할

local buffer: 디바이스의 작업공간

 

interrupt line: I/O device의 요청을 전달 받는 곳

 

mode bit: 지금 실행되는 것이 운영체제인지 사용자 프로그램인지 구분

registers: 메모리보다 더 빠르고 정보를 저장하는 곳

 

Timer

 

하드웨어. 특정 프로그램이 CPU를 독점하지 못하도록 막음.

보통 1초보다 짧은 시간으로 설정되어 있음.

 

Mode bit

 

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치.

 

사용자 모드: 1. 사용자 프로그램 수행

모니터 모드 (커널모드, 시스템 모드): 0. OS 코드 수행

 

interrupt나 exception 발생 시 하드웨어가 mode bit을 0으로 바꿈

사용자 프로그램에게 CPU를 넘기기 전에 1로 세팅

 

DMA (Direct Memory Access)

 

CPU말고 DMA도 메모리에 접근할 수 있음.

I/O가 너무 자주 입출력 할 때 CPU가 방해를 받음. I/O의 로컬 버퍼까지 작업이 끝나면 내용을 메모리에 복사하는 역할 까지 해줌.

 

바이트 단위가 아니라 블럭 단위로 인터럽트를 발생시킴

 

Memory Controller

 

CPU와 DMA Controller 사이를 교통정리함.

 

 

입출력(I/O)의 수행

 

모든 I/O 명령은 특권 명령.

사용자 프로그램은 어떻게 I/O를 하는가?

 

1. 시스템콜 (사용자 프로그램이 OS의 함수를 호출)

 - I/O를 하기위해 운영 체제의 메모리로 점프해야 함.

 - 근데 mode bit이 1로 되어 있어 접근 불가능

 - 사용자 프로그램이 interrupt line을 세팅하는 것을 실행

 - CPU는 interrupt가 들어왔기 때문에 mode bit을 0으로 바꾸고 OS에게 운영권이 넘어감

 

2. OS는 올바른 요청인지 확인 후 수행

 

 

인터럽트

 

Interrupt: 하드웨어 인터럽트. 하드웨어가 발생시킨 인터럽트

Trap: 소프트웨어 인터럽트

 - Exception: 프로그램이 오류를 범한 경우

 - System Call: 프로그램이 커널 함수를 호출하는 경우

 

현대의 운영체제는 인터럽트에 의해 구동됨.

 

인터럽트 벡터: 해당 인터럽트의 처리 루틴 주소를 가지고 있음

인터럽트 처리 루틴 ( = 인터럽트 핸들러): 해당 인터럽트를 처리하는 커널 함수

 

 

동기식 입출력과 비동기식 입출력

 

동기식 입출력 ( synchronous I/O)

 

I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

 

구현 방법: 

 1) I/O가 끝날때까지 CPU를 낭비시킴. 매 시점 하나의 I/O만 일어남

 2) I/O가 완료 될 때까지 다른 프로그램에 CPU를 넘겨줌

 

비동기식 입출력 (asynchronous I/O)

 

I/O 요청 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

ex) write 작업

 

두 경우 모두 인터럽트로 완료를 알림.

 

 

I/O를 수행하는 두 가지 방법

 

1. I/O를 수행하는 special instruction에 의해

2. Memory Mapped I/O에 의해

 

 

프로그램의 실행 (Memory Load)

 

프로그램은 file system에 파일 형태로 저장되어 있음

실행 파일을 실행시키면 메모리로 올라가서 프로세스가 됨

중간에 virtual memory라고 한 단계를 더 거치게 됨

 

1. 어떤 프로그램을 실행 시킴

2. 그 프로그램의 address space가 형성이 됨

 

ex) stack - data를 쌓아두는 곳

    data - 변수, 프로그램이 사용하는 자료구조

    code - 기계어 코드

 

3. kernel은 부팅 시 메모리에 상주하게 됨

 

 

커널 주소 공간의 내용

 

code: 커널 코드.

시스템콜, 인터럽트 처리코드

자원 관리를 위한 코드

편리한 서비스 제공을 위한 코드

 

PCB: 프로그램이 하나 돌아가면 그 프로그램을 관리하기 위한 자료구조가 커널에 하나씩 만들어 짐

 

 

사용자 프로그램이 사용하는 함수

 

사용자 정의 함수: 자신의 프로그램에서 정의한 함수

 

라이브러리 함수: 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수. 자신의 프로그램 실행 파일에 포함되어 있음

 

커널 함수: 운영체제 프로그램의 함수. 커널 함수의 호출 = 시스템 콜