컴퓨터 시스템 구조
CPU + Memory로 구성된 것이 컴퓨터이다.
Disk, 키보드, 마우스, 프린터, 모니터 등은 I/O Device이다.
I/O 디바이스는 인풋 디바이스, 아웃풋 디바이스로 구분할 수 있다.
인풋 디바이스는 키보드, 마우스, 디스크가 되고, 아웃풋 디바이스는 프린터, 모니터, 디스크가 된다.
각 I/O 디바이스들을 CPU가 컨트롤 하는게 아닌, Device Controller가 각 I/O 디바이스를 컨트롤 한다.
또한 각 디바이스는 작업 공간이 필요한데, 해당 작업 공간을 local buffer라 한다.
CPU가 컨트롤하지 않는 이유는 처리 속도가 다르기 때문이다.
CPU 내부에는 가장 빠른 저장장치인 레지스터가 존재하고, mode bit이 있는데, mode bit은 해당 요청을 보낸 것이 사용자인가, 운영체제인가 구분하는 bit 이다.
CPU는 메모리에만 접근한다.
인터럽트가 들어오면 CPU의 제어권이 뺏긴다.
CPU 내부에 PC 레지스터가 다음 실행할 명령어의 메모리 주소를 가지고 있다.
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
Mode bit을 통해 하드웨어 적으로 두 가지 모드의 operation 지원
- 1 : 사용자 모드 : 사용자 프로그램 수행
- 0 : 커널 모드 : OS 코드 수행
보안을 해칠수 있는 중요한 명령어는 커널 모드에서만 수행 가능
Interrupt나 Exception 발생 시 하드웨어가 Mode bit을 0으로 바꿈
사용자 프로그램에게 CPU를 할당하기 전에 Mode bit을 1로 셋팅
Timer
- 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0이 되면 타이머 인터럽트 발생
- CPU를 특정프로그램이 독점하는 것으로부터 보호
타이머는 time sharing을 구현하기 위해 이용된다.
타이머는 현재 시간을 계산하기 위해서도 사용된다.
Device Controller
I/O Device Controller
- 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 Controller Register, Status Register를 가진다.
- Local Buffer를 가진다.(일종의 Data Register)
I/O는 실제 Device와 Local Buffer 사이에서 일어난다.
Device Controller는 I/O가 끝났을 경우 Interrupt로 CPU에 그 사실을 알린다.
- Device Driver(장치 구동기) : OS 코드 중 각 장치별 처리 루틴 → 소프트웨어
- Device Controller(장치 제어기) : 각 장치를 통제하는 일종의 작은 CPU → 하드웨어
입출력(I/O)의 수행
모든 입출력 명령은 특권 명령
- 사용자 프로그램이 I/O 장치에 직접 접근하지 못하고, 반드시 OS를 거쳐야 한다.
- 사용자 프로그램이 I/O 요청을 하기위해 OS에게 요청하는 것이 시스템 콜이다.
- 시스템 콜(System Call)
- 사용자 프로그램은 운영체제에게 I/O 요청
- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O 요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
인터럽트(Interrupt)
인터럽트 당한 시점의 레지스터와 Program Counter를 Save한 후, CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
- Trap(소프트웨어 인터럽트)
- Exception : 프로그램이 오류를 범한 경우
- System Call : 프로그램이 커널 함수를 호출하는 경우
- 인터럽트 벡터 : 해당 인터럽트 처리 루틴 주소를 가지고 있다.
- 인터럽트 처리 루틴(인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
현대의 운영체제는 인터럽트에 의해 구동된다.
즉, CPU는 대부분 사용자 프로그램이 사용하고, 인터럽트가 발생했을 때 OS가 CPU를 사용하게 된다.
시스템 콜(System Call)
사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
동기식 입출력과 비동기식 입출력
- 동기식 입출력(synchronous I/O)
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다.
- 구현방법 1
- I/O가 끝날 때 까지 CPU를 낭비시킨다.
- 매시점 하나의 I/O 만 일어날 수 있다.
- 구현방법2
- I/O가 완료될때까지 해당 프로그램에서 CPU를 뺏는다.
- I/O 처리를 기다리는 줄에 그 프로그램을 줄을 세운다.
- 다른 프로그램에 CPU를 할당한다
- 구현방법 1
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다.
- 비동기식 입출력(asynchrounous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다.
두 경우 모두 I/O 완료는 인터럽트로 알려준다.
DMA
Direct Memory Access
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재 없이 Device Controller가 Device의 Buffer Storage의 내용을 메모리에 Block 단위로 직접 전송
- 바이트 단위가 아닌 Block 단위로 인터럽트를 발생시킨다.
서로 다른 입출력 명령어
- I/O를 수행하는 Special Instruction에 의해
- Memory Mapped I/O에 의해 : 각 I/O 디바이스에 메모리 주소를 할당하여, I/O 디바이스에 직접 접근이 가능
저장장치 계층 구조
위로 갈수록 속도가 빠르고, 가격이 비싸며, 용량이 적다.
레지스터, 캐시, 메인 메모리는 휘발성이다.
초록색 부분 Primary(Executable) 부분의 계층은 CPU가 직접 접근이 가능하고, Secondary 계층은 CPU의 직접 접근이 불가하다.
직접 접근이란 바이트 단위의 접근이다.
- 캐싱 : 빠른 매체에다 정보를 쓰는 것, 재사용 목적
프로그램의 실행(메모리 Load)
프로그램은 실행 파일 상태로 파일 시스템에 저장되어 있다.
해당 프로그램을 실행하면, 메인 메모리에 프로세스 상태로 올라가게 된다.
실제로 바로 올라가는게 아닌, 가상 메모리를 거쳐서 올라간다.
프로그램을 실행시키면, 해당 프로그램만의 독자적인 주소 공간이 생긴다.
모든 데이터가 메모리에 올라가는게 아닌, 필요한 부분만 올라가며, 하드디스크의 Swap Area에 적재될 수도 있다.
커널은 OS 부팅후, 메인 메모리에 항상 상주하므로, 주소 공간도 계속 상주하게 된다.
Swap Area와 FIleSystem 모두 하드디스크이지만, Swap Area는 휘발성이다.
가상 메모리에 있는 데이터를 실제 메모리에 올려야 할때 주소를 변환해서 올린다.
커널 주소 공간의 내용
커널의 데이터 영역에는 CPU, Memory, Disk 접근을 위한 자료구조와, 각 프로세스를 관리하기 위한 정보가 담긴 자료구조인 PCB가 담겨져 있다.
코드 영역에는 시스템 콜, 인터럽트 처리 코드, 자원 관리를 위한 코드, 편리한 서비스 제공을 위한 코드 등이 있다.
스택 영역에는 각 프로세스마다의 커널 스택이 존재한다.
커널 코드도 함수로 이루어져 있기 때문에, 커널 코드 실행 시 각 프로세스의 스택을 이용한다.
사용자 프로그램이 사용하는 함수
사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
- 자신의 프로그램의 실행 파일에 포함되어 있음
커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 = 시스템 콜
함수들은 각 주소 공간의 코드 영역에 저장된다.
프로그램 실행 단계
http://www.kocw.net/home/search/kemView.do?kemId=1046323
'휴지통 > CS' 카테고리의 다른 글
[OS] Process Management (0) | 2023.09.03 |
---|---|
[OS] Process (0) | 2023.09.01 |
[OS] Introduction to Operating Systems (0) | 2023.08.30 |
TCP/IP (0) | 2023.08.23 |
스레드의 종류 (0) | 2023.08.15 |