•
참고 강의
동기식 입출력(synchronous I/O)
: I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
•
I/O 장치까지 가서 직접 확인하고 읽어와서 그거를 보고 작업(synchronous read)
•
I/O 장치에 쓰는 걸 눈으로 확인하고 나서 그 다음일을 실행(synchronous write)
•
I/O 요청 → device driver → 실제 I/O 장치에서 작업 진행 → 작업물 도착, 인터럽트 발생(device controller) → 다음 작업 실행
•
CPU가 낭비된다 → CPU를 가지고서 기다리고 있기 때문에
구현 방법
비동기식 입출력(asynchronous I/O)
: I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
•
I/O 요청 → 바로 CPU 제어권을 얻어서 다른 작업 진행 → 인터럽트 발생(device controller) → 작업 진행
◦
I/O와 무관한 일을 계속 실행한다.
•
write의 경우에는 비동기식 입출력이 자연스럽다. → 정말 잘 써져있는지 확인할 때에는 Synchronous write 진행
두 경우 모두 I/O 완료는 Interrupt로 알려줌
입출력 요청을 해두고 Instruction를 실행할 수 있으면 비동기식 입출력
CPU에서 실행할 수 있는 일반적인 Instruction(왼쪽 그림)
•
Memory Instruction Memory 따로, I/O를 수행하는 Special Instruction 따로
•
I/O device도 주소가 있어서 특정 주소 I/O device에 접근 가능
Memory Mapped I/O : 메모리 주소에 연장 주소를 붙여서 접근을 하는 방식(오른쪽 그림)
저장장치 계층 구조
위로 갈수록 속도가 빠르고, 용량이 적고, 휘발성 매체다.(데이터가 위에 있을수록 시스템의 성능 좋아짐)
CPU에서 직접 접근해서 처리하는 영역 : Primary(Executable)
•
bit 단위로 접근 가능함 → DRAM
•
속도 차이를 완충하기 위해서 Cache Memory, Register가 필요, 하지만 용량이 작아서 당장 필요한 것만 밑에서 위로 올려서 사용 : Caching
◦
재사용을 위해서 필요
•
최근에는 주기억 장치(Main Memory)와 Magnetic Disk 사이에 전자디스크(SSD)영역이 추가됨.
SSD, HDD
CPU에서 직접 접근해서 처리 못하는 영역 : Secondary
•
Sector 단위로 접근하기 때문에 직접 접근해서 처리 불가
Data가 계층 사이로 이동하는 것도 I/O인데, I/O하는데 걸리는 시간보다 저장 장치 계층 구성이 시간적으로 절약되고 효율적
프로그램의 실행(메모리 load)
File System에 파일 형태로 저장이 되어 있다가 실행을 시키면 메모리로 올라가서 프로세스가 된다.
→ 중간에 거치는 것이 Virtual Memory
•
메모리 주소 공간이 만들어지게 된다. → 그 프로그램만의 독자적인 주소 공간(0번지부터 시작하는 독자적 주소 공간)
•
코드, 데이터, 스택 영역으로 구성
◦
코드 : CPU에서 실행할 기계어 코드
◦
데이터 : 전역 변수, 프로그램이 사용하는 자료구조
◦
스택 : 함수를 호출, 리턴할 때 데이터를 쌓을 때 사용하는 용도
•
커널이 아닌 주소 공간은 프로그램을 끄면 사라지게 된다.
•
주소 공간은 메모리에 다 올리지 않는다 → 메모리 낭비
◦
당장 필요한 부분에 해당하는 코드만 올려두고 그렇지 않은 부분은 올리지 않는다.
▪
물리적인 메모리 : 필요한 부분 / Disk Swap Area : 그렇지 않은 부분
◦
사용을 하지 않으면 메모리에서 쫓아냄.
•
가상 메모리와 물리적 메모리에서의 주소 번지가 다르다. → 주소 변환
◦
주소 변환 계층에서 진행
File System 하드디스크 : 컴퓨터를 꺼도 사라지지 않음(비휘발성)
Swap area 하드디스크 : 메모리의 연장 공간을 사용하는 휘발성의 공간
커널 주소 공간의 내용
커널도 하나의 프로그램이기 때문에 code, data, stack으로 구성
•
Code
자원 관리를 위한 코드, 사용자에게 편리한 인터페이스를 제공하기 위한 코드
인터럽트 처리 코드(함수 형태로 구현), System Call
•
Data
운영체제가 사용하는 여러 자료구조 정의
하드웨어 관리 통제를 위한 자료구조를 만들어서 관리
프로세서의 독자적인 주소 공간을 관리하기 위한 자료 구조 필요 → PCB(Process Control Block)
◦
시스템안에 프로그램이 돌아가면 그 프로그램을 관리하기 위한 자료구조가 OS 커널에 하나씩 만들어지는데 그게 PCB
•
Stack
함수 구조로 코드가 구성되어 있기 때문에 함수를 호출하거나 리턴할 때 Stack 필요
사용자 프로그램마다 커널 스택을 따로 두고 있음
사용자 프로그램이 사용하는 함수
모든 프로그램은 함수 구조로 짜여져 있다.
•
함수
1.
사용자 정의 함수
자신의 프로그램에서 정의한 함수
내가 직접 작성한 함수
2.
라이브러리 함수
해당 기능을 구현해둔걸 가져다가 쓰는 것
자신의 프로그램 안에 포함이 되어 있다.
3.
커널 함수
운영체제 안에서 정의된 함수
프로그램 안에서 가져다가 사용 가능(System Call) → 커널 함수 안에 들어가 있음
프로그램의 실행