컴퓨터 시스템 구조
컴퓨터는 크게 CPU, Memory, I/O device 로 구성되어있다.
각 IO 장치에는 device controller가 붙어있다.
CPU는 메모리에서 꺼내와서 프로그램을 실행한다.
컴퓨터 안에는 timer라는 하드웨어가 존재한다. timer는 특정 프로그램이 CPU를 독점하는 것을 막는다.
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치가 필요한데 이 장치가 바로 Mode bit이다.
Mode bit을 통해 하드웨어적으로는 두 가지 모드의 operation을 지원한다.
- 1 사용자 모드: 사용자의 프로그램을 수행한다.
- 0 모니터 모드(= 커널 모드, 시스템 모드): OS 코드를 수행한다.
interrupt나 Exception이 발생하면 하드웨어가 mode bit을 0으로 바꿔서 CPU의 제어권을 OS에게 넘기고
사용자 프로그램에게 CPU를 넘기기 전에는 mode bit을 1로 바꾼다.
Timer
타이머는 정해진 시간이 흐른뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다.
타이머는 매 클럭 틱 때마다 1씩 감소한다.
타이머의 값이 0이 되면 타이머 인터럽트가 발생한다.
CPU를 특정 프로그램이 독점하는 것에서 보호한다.
타이머는 time sharing을 구현하기 위해 널리 이용되며, 현재 시간을 계산하기 위해서도 사용된다.
Device Controller
I/O 장치 유형을 관리하는 일종의 작은 CPU이다.
제어 정보를 위해서 control register와 status register를 가지며, local buffer도 가진다.
I/O는 실제 device와 local buffer 사이에서 일어난다.
Device Controller는 I/O가 끝났을 때(사용자가 입력을 마친 경우) interrupt로 CPU에 그 사실을 알린다.
Interrupt
인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
Interrupt
Interrupt(하드웨어 인터럽트)는 하드웨어가 발생시킨 인터럽트를 말한다.
Tap(소프트웨어 인터럽트)는 Exception, System call로 나뉜다.
System call
시스템 콜은 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것을 말한다.
동기식 입출력과 비동기식 입출력
두 경우 모두 I/O의 완료는 인터럽트로 알려준다.
동기식 입출력
- 동기식 입출력은 I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다.
- 구현 방법에는 2가지가 있다.
- I/O가 끝날 때까지 CPU를 낭비시킨다. -> 매시점 하나의 I/O만 일어날 수 있다.
- I/O가 완료될 떄까지 해당 프로그램에게서 CPU를 뺐는다. I/O 처리를 기다리는 줄에 그 프로그램을 줄 세운다. 다른 프로그램에게 CPU를 준다.
비동기식 입출력
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다.
DMA(Direct Memory Access)
빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해서 사용한다.
CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 블록 단위로 직접 전송한다.
바이트 단위가 아니라 블록 단위로 인터럽트를 발생시킨다. (CPU에 인터럽트가 많이 걸리면 작업이 비효율적이게 된다. DMA가 IO에서 들어온 인터럽트를 처리하고 모든 일을 처리 한 후 CPU에 인터럽트를 한번만 걸게 한다. )
저장장치 계층 구조
아래 링크를 참조하자.
https://systorage.tistory.com/entry/CS-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0
프로그램의 실행
하드디스크에 있는 실행 파일을 실행하면 가상메모리에 실행 파일의 주소 공간이 형성된다.
이러한 주소 공간은 code, data, stack으로 나뉜다.
물리 메모리에는 주소 공간에 있는 필요한 함수만 올린다.
커널 주소 공간의 내용
code: 커널 코드
- 시스템콜, 인터럽트 처리 코드
- 자원 관리를 위한 코드
- 편리한 서비스 제공을 위한 코드
data: 운영체제가 사용하는 여러 자료구조가 저장된다. (cpu, memory, disk)
stack: 프로그램의 커널 스택
사용자 프로그램이 사용하는 함수
어떤 언어로 프로그램을 작성해도 함수로 짜여져있다.
함수의 종류
- 사용자 정의 함수: 자신의 프로그램에서 정의한 함수이다.
- 라이브러리 함수: 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수이며, 자신의 프로그램의 실행 파일에 포함되어 있다.
- 커널 함수: 운영체제 프로그램의 함수이다. 커널 함수의 호출 = 시스템 콜
'Computer Science > Operating System' 카테고리의 다른 글
[CS] 운영체제 - 프로세스 동기화 (0) | 2022.09.01 |
---|---|
[CS] 운영체제 - CPU 스케줄링 (0) | 2022.09.01 |
[CS] 운영체제 - 프로세스 관리 (0) | 2022.09.01 |
[CS] 운영체제 - 프로세스 (0) | 2022.08.31 |
[CS] 운영체제 - 운영체제란? (0) | 2022.08.30 |