- 동기식 입출력과 비동기식 입출력
- 동기식 입출력 (synchronous I/O)
- I/O 요청 후 입출력 작업이 완료된 후 에야 제어가 사용자 프로그램에 넘어 감
- 구현 방법 1
I/O가 끝날 때까지 CPU를 낭비 시킴
매 시점 하나의 I/O만 일어날 수 있음
- 구현 방법 2
I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
다른 프로그램에게 CPU를 줌
- 동작의 결과를 확인하고 나서 실행한다.
- 비동기식 입출력(asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어 감
- 두 경우 모두 I/O의 완료는 인터럽트로 알려줌
- DMA (Direct Memory Access)
- 원래는 메모리에 접근할 수 있는 것은 CPU밖에 없음
- Input으로 들어온 정보를 CPU가 메모리로 copy
- 하나하나 인터럽트가 걸리면 너무 많고 효율적으로 동작 x
- 그래서 DMA를 붙여 놓고 메모리를 접근할 수 있게 함
- 작은 일들은 버퍼에 특정크기 데이터가 쌓이면 한번만 걸어서 CPU에 알려줌
- DMA가 메모리로 카피해 특정 크기만큼 데이터가 메모리에 올라왔다고 인터럽트를 걸어 알려줌
- CPU가 인터럽트를 당하는 빈도가 적어지고 효울적으로 동작 O
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
- 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
서로 다른 입출력 명령어
- 메모리만 접근하는 기계어/ I/O장치에 접근하는 기계어
- 좌측 : 일반적인 I/O를 수행하는 spacial instruction이 따로 있다
- 우측 : Memory Mapped I/O
- 위로 갈수록 속도가 빠른 매체를 사용, 대신 단위 공간당 비싸기 때문에 용량이 적다
- 분홍색 : 비휘발성 매체 , CPU 직접 접근 불가 - Secondary
- 연두색 : 휘발성 매체 , CPU가 직접 접근해서 처리 가능 - Primary(Executable)
- Caching : 빠른 매체로 정보를 읽어 들여서 사용하는 것 , 재사용을 목적으로 하는 것, 용량이 위로 갈수록 적어 지기 때문에 모든 것을 읽어 들일 수 없고 필요한 부분만 올려서 사용
- 프로그램의 실행 (메모리 load)
- Virtual memory
- 실행시키면 0번지로 시작하는 독자적인 주소 공간이 만들어짐
- Code : 프로그램 기계어 코드
- Data : 변수 , 프로그램에서 사용하는 자료구조
- Stack : 함수이기 때문에 데이터를 쌓았다가 꺼내는 공간
- Physical memory
- 물리적인 공간
- 논리적인 메모리는 당장 필요한 부분만 올려진다
- 그렇지 않은 부분은 Disk의 Swap area에 놓아진다
- 논리적인 메모리는 프로그램이 종료되면 사라짐
- File system : 비휘발성, 전원이 나가도 내용이 유지됨
- Swap area : 전원이 나가면 다 없어짐
- Address translation : 주소 변환
- 커널 코드
- 운영체제가 하는 일 : 자원을 효율적으로 관리하는 일과 관련된 코드&편리한 서비스 제공을 위한 코드
- 운영체제는 인터럽트가 들어오면 CPU를 얻게 됨 : 각각의 인터럽트마다 어떤 처리를 해야 하는지가 함수 형태로 들어있을 것이다
- 데이터 영역
- 하드웨어들을 직접 관리하고 통제
- 하드웨어마다 자료구조를 만들어 관리할 것이다.
- 프로세스들을 관리, 현재 실행중인 프로그램을 관리하기 위한 자료구조 (PCB)
- 스택
- 운영체제도 함수구조이기 때문에 리턴, 함수 호출 등을 위해 필요한 스택
- 사용자 정의 함수 : 내가 직접 정의한 함수
- 라이브러리 함수 : 가져다 쓴 함수
- 둘 다 어쨌든 컴파일해서 실행파일을 만들면 내 함수 안에 다 포함됨
- 사용자 프로세스의 코드영역에 들어있다
- 커널 함수 : 운영체제 안에서 정의한 함수
- 얘는 커널 코드안에 있는 함수
- 커널 함수를 호출할 때는 시스템 콜을 통해 호출해야 한다
- 메모리 주소를 바꾼다? 다른 영역으로 점프 x
- 프로그램 A가 CPU를 잡고 있으면 user mode
- 만약 시스템 콜을 하게 되면 커널 주소공간에 있는 코드 실행
- 끝나면 다시 A로 CPU 제어권이 넘어와 본인의 주소공간에 있는 코드 실행
'Study > 운영체제' 카테고리의 다른 글
[운영체제] 5. Process1 필기 (0) | 2021.03.18 |
---|---|
[운영체제] 3. System Structure & Program Execution 1 필기 (0) | 2021.03.15 |
[운영체제] 1. Introduction to Operating Systems 필기 (0) | 2021.03.04 |