728x90
반응형
인터럽트
- 하드웨어 인터럽트
- timer의 인터럽트
- 컨트롤러의 인터럽트 : 요청한 I/O 작업이 끝났다는 것을 CPU에게 알림
- 트랩(Trap, 소프트웨어 인터럽트)
- Exception : 프로그램이 오류를 범한 경우 (ex. 0으로 나누는 연산, 사용자 프로그램에서 운영체제에 접근 등)
- System call : 프로그램이 커널 함수를 호출하는 경우
- 인터럽트 벡터
- 인터럽트의 처리 루틴의 주소를 가지고 있음
- 인터럽트 처리 루틴
- 인터럽트를 처리하는 커널 함수
— 만약 인터럽트가 들어왔다면 지금 하던 작업을 멈추고(Program Counter 저장) CPU 제어권을 운영체제(OS)에게 넘김
— 운영체제 내부에는 인터럽트 상황에 따라 처리할 수 있도록 커널함수들이 정의돼있음
— I/O 디바이스는 운영체제(OS)에서만 접근 가능
Mode bit
CPU 내부에 0,1을 나타내는 장치
- 0일 경우 : 모든 기계어 집합을 수행할 수 있음 (운영체제가 CPU를 가진 경우)
- I/O 디바이스에 접근하는 인스트럭션은 0일 경우에만 가능(운영체제만 접근 가능)
- 1일 경우 : 한정된 기계어 집합을 수행할 수 있음 (사용자 프로그램이 CPU를 가진 경우)
- 사용자 프로그램은 1일 경우 커널로 접근할 수 없기 때문에 시스템 콜을 통해 요청
- 시스템 콜(System Call) : 운영체제에 있는 함수를 사용자 프로그램이 필요에 의해서 요청하는 것
- 사용자 프로그램이 의도적으로 인터럽트를 세팅함
- 모든 작업이 중단되고 CPU가 운영체제로 넘어감
타이머(Timer)
사용자 프로그램이 CPU를 독점해서 사용하는 것을 막기 위해 시간을 세팅하는 역할
- 시간을 초과하면 인터럽트를 걸어 CPU를 운영체제에게 넘김
동기식 입출력(Synchronous I/O)
- 일반적으로 읽기 작업(Read)
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어감
- 구현 방법 1
- I/O가 끝날 때까지 CPU를 낭비시킴
- 매시점 하나의 I/O만 일어날 수 있음(I/O도 낭비)
- 구현 방법 2
- I/O가 완료될 때까지 해당 프로그램에서 CPU를 빼앗음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌비동기식 입출력(Asynchronous I/O)
- 구현 방법 1
- 일반적으로 읽기 작업(Read), 쓰기 작업(Write)
- I/O 요청 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감
위의 두 경우는 모두 I/O의 완료는 디바이스 컨트롤러에서 인터럽트로 알려줌
비동기식 입출력(Asynchronous I/O)
- 일반적으로 읽기 작업(Read), 쓰기 작업(Write)
- I/O 요청 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감
위의 두 경우는 모두 I/O의 완료는 디바이스 컨트롤러에서 인터럽트로 알려줌
동기식 입출력 VS 비동기식 입출력
- 입출력이 진행되는 과정에서 인스트럭션을 실행시키는지에 따른 차이가 있음
DMA(Direct Memory Access)
메모리에 접근할 수 있는 장치
- CPU뿐만이 아니라 DMA를 통해 메모리에 접근이 가능함
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
(키보드 한번 누를때마다 CPU에 인터럽트 요청을 하면 오버헤드가 발생할 수 있음) - byte 단위가 아니라 block 단위로 인터럽트를 발생시킴
- CPU의 중재없이 DMA를 통해 I/O의 버퍼 스토리지의 내용을 메모리에 블럭단위로 직접 전송
서로 다른 입출력 명령어
- 좌측은 메모리에 접근하는 인스트럭션과 I/O에 접근하는 스페셜 인스트럭션이 있음
- 우측은 주소값을 통해 접근하는 Memory Mapped I/O라고 부름
저장장치 계층 구조
위로 갈수록 속도가 빠르고, 비용이 비싸고, 용량이 작음
Primary(CPU 직접 접근해 처리 가능한 부분) : 휘발성 / 속도가 빠름 / 비용이 비쌈 / 용량이 작음 / 바이트 단위로 접근이 가능해야 함
Secondary(CPU가 직접 접근하지 못하는 부분) : 섹터 단위로 접근 가능
정적 할당영역
- 코드, 데이터
동적 할당영역
- 힙, 스택
프로그램의 실행
- 프로그램의 하드디스크에 실행파일 형태로 저장돼있음
- 프로그램을 실행시키면 메모리로 복사되어 하나의 프로세스가 됨
- 프로그램을 실행시키면 실행시킨 그 프로그램의 독자적인 주소 공간이 생성됨
(0번부터 시작 / stack, data, code 영역으로 구성됨) - 커널 주소 공간은 컴퓨터 부팅시 커널영역에 자동으로 위치함
- 전체 주소공간을 올리는 것이 아니라 당장 필요한 것만 주소 변환을 통해 물리적 메모리에 저장하고
나머지는 메모리의 연장 공간으로 디스크의 Swap Area라는 공간에 놔둠(메모리 낭비를 방지) - 또한 사용하지 않는 메모리는 물리적 메모리에서 빼버림
- 프로그램을 실행시키면 실행시킨 그 프로그램의 독자적인 주소 공간이 생성됨
- 가상 메모리(Virtual Memory)를 통해서 물리적 메모리에 필요한 것만 할당
커널 주소 공간의 내용
프로그램의 실행
개괄적인 동작원리
- CPU에서 실행 중인 프로그램 A가 디스크(또는 다른 I/O 장치)에 입력 요청을 보내야 할 일이 생긴다.
- CPU가 디스크에서 데이터를 읽어올 때, CPU는 직접 디스크에 접근하지 않고 디스크 컨트롤러에 명령을 해 놓는다.
- CPU는 명령을 던져놓고 자기는 다른 작업(다른 프로세스 B의 실행)을 계속 한다. (CPU는 매우 빠른 속도로 일하기 때문에 쉴 틈이 없다)
- 디스크가 요청이 들어온 데이터를 찾으면 local buffer에 넣어 놓는다.
- 디스크 컨트롤러는 buffer에 데이터가 들어오면 CPU에 interrupt를 건다.
- CPU가 interrupt line을 확인하고 interrupt가 들어온 게 있음을 확인한다.
- CPU의 제어권이 OS한테 넘어간다.
- OS는 왜 interrupt가 들어왔는지 살펴보고 요청을 보냈던 데이터가 들어왔음을 확인한다.
- OS는 입력된 값을 요청을 보냈던 프로그램 A의 메모리 공간에 카피를 해준 다음, 이미 실행되고 있었던 프로세스 B에 할당된 시간이 끝나기를 기다렸다가 끝나면 프로그램 A한테 CPU를 넘겨 준다.
728x90
반응형
'크래프톤 정글 - TIL' 카테고리의 다른 글
크래프톤 정글 5기 TIL - Day 13(알고리즘) (0) | 2024.04.01 |
---|---|
크래프톤 정글 5기 TIL - Day 12(2)(프로세스) (0) | 2024.03.29 |
크래프톤 정글 5기 TIL - Day 11 (0) | 2024.03.28 |
크래프톤 정글 5기 TIL - Day 10 (0) | 2024.03.28 |
크래프톤 정글 5기 TIL - Day 9 (0) | 2024.03.27 |