티스토리 뷰
Synchronous I/O & Asynchronous I/O
싱크 : 동기 ←→ 비동기
Synchronous I/O
I/O요청 후 입출력 작업이 완료된 후 제어가 사용자 프로그램으로 넘어가는 것으로, 일단 프로세스는 대기상태가 된다
구현 방법 1
- I/O가 끝날 때까지 프로세스는 대기상태가 되고, CPU도 해당 프로세스를 가지고 있는다.
- 매시점 하나의 I/O만 일어날 수 있다
- → 프로세스 논다 & CPU 논다
구현방법 2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗고, I/O처리를 기다리는 다른 프로그램에게 CPU를 준다
- 그동안 입출력을 요청한 프로세스는 대기상태이다.
- (입출력을 요청한 프로세스는 놀고있다, 입출력 완료 대기중)
- CPU는 다른 I/O 처리 목록이 있으면 놀지않고 처리한다.
- → 프로세스 논다 & CPU 놀지 않는다
Asynchronous I/O
- I/O가 시작 된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다.
- 프로세스가 입출력 요청만 하고 놀지않고 다음 instruction을 즉시 수행하러 간다.
- → 프로세스 놀지 않는다 & CPU 놀지 않는다
read는 읽은 반환값을 필요로하는 경우가 많아서 Synchronous하게 주로 구현하는 반면
write는 굳이 출력값을 꼭 확인해야 다음 진행을 할 수 있는것은 아니므로 Acynchronous하게 하는 것이 일반적이다.
read도 읽은 값을 반환 받기전 그 값이 필요없는 부분을 먼저 하도록 하는 방식으로 Acynchronous하게 할 수는 있다.
Sync / Async 두개 모두 I/O 완료 후 인터럽트로 해당 사실을 알려준다
입출력 명령어
좌측) I/O를 수행하는 special instruction에 의해 입출력
- CPU의 Instruction에는 메모리에만 접근하는 Instrcution과 I/O 장치에 접근하는 Instrcution이 따로 존재
- load, store 등 (메모리 접근 instrcution)
- I/O Device에 접근하는 Instrcution 별도 존재 → 특정 주소에 대해 I/O에 접근하는 명령을 실행하면 해당 I/O 장치에 접근하게 된다
우측) Memory Mapped I/O에 의해 입출력
- 메모리의 연장선으로서 I/O장치에 접근하는 것 또한 메모리 주소에 접근하는 것과 마찬가지로 접근하고, 해당 주소가 I/O장치 주소라면 시스템콜을 통해 I/O를 실행하는 방식이다
- I/O 장치에 메모리 주소를 부여하여 메모리에 접근하는 방식으로 접근 후 I/O 명령을 실행
저장장치 구조
CPU가 직접 접근하기 위해서는 Byte단위로 접근가능한 매체여야 한다.
- Memory의 경우 Byte단위로 주소를 매기므로 Executable하다.
- 하드디스크의 경우 섹터단위로 접근하므로 Executable하지 않다
캐시메모리
- 캐싱 : 더 빠른 저장장치로 정보를 복사해놓는 것
- 상위 저장장치가 하위 저장장치보다 용량이 작으므로 모든 정보를 복사해놓지는 못하므로, 최근에 자주 사용되는 자료들을 기준으로 저장해 놓는다. (다양한 알고리즘이 있다)
프로그램의 실행
프로그램이라는 것은 실행파일 형태로 하드디스크 (File System)에 저장이 되어있고, 실행을 시키게 되면 물리적 메모리에 올라가서 프로세스가 되어서 실행이 된다.
가상메모리
물리적 메모리에 프로세스가 올라가기전 거치는 하나의 과정이 더있는데 가상 메모리를 생성하는 것이다.
프로세스를 생성하면 해당 프로세스의 Address Space(주소공간)이 형성이 되는데 그 프로그램만을 위한 0번지 부터 시작하는 독자적인 주소공간이 형성되고, 구조는 Code, Data, Stack 으로 이뤄져있다.
Code : 기계어 코드
Data : 변수, 전역변수
Heap : 동적 할당 공간
Stack : 지역변수, 매개변수, 함수를 호출할 때 쌓이고 리턴할 때 반환
물리적 메모리
물리적 메모리에는 커널 영역이 존재하고, 프로세스의 주소공간 중 실제 필요한 공간만을 할당하게 되고 종료시 지워버리게 된다.
프로세스가 종료된 건 아닌데 사용되지 않는중이면 메모리 공간에서 바로 지우지 않고, 필요한 부분만 남겨놓고 나머지는 Swap area(하드)에 보내게 된다.
Swap area
Swap area는 하드디스크 부분으로, 기존 하드디스크와 다르게 전원이 나가면 지워지는 특성을 갖는다. 단지 메모리 공간의 연장선으로서 사용하는 공간이다
Address Transition
가상 메모리 공간에 대한 주소를 실제 물리적 메모리 접근을 위한 주소로 변환하는 것으로 논리적 메모리 주소를 물리적 메모리 주소로 변환하는 장치를 통해 이뤄진다.
커널 주소 공간
커널도 메모리 공간을 갖는 프로세스로서 Code, Data, Stack의 구조를 갖는다
커널 Code
- 효율적인 자원 관리를 위한 코드
- 편리한 서비스 제공을 위한 코드
- 시스템 콜, 인터럽트 처리를 위한 코드
커널 Data
- CPU, Memory, Disk를 관리하기 위한 여러 자료구조 들이 정의 되어있다.
- 마찬가지로 실행되는 Process를 관리해야하므로 각 프로그램들을 관리하기 위한 자료구조들이 정의되있다.
→ 이를 PCB라 한다 : Process Control Block
커널 Stack
- 실행 중인 프로세스들은 독립적으로 커널 코드에 존재하는 시스템 콜이나 정의된 코드, 함수들을 사용할 수 있다.
- 따라서, 어떤 프로세스가 코드나 함수를 실행중인가에 따라서 별도로 관리해야하므로 사용자 프로그램 (프로세스)마다 따로 커널 스택을 두게된다
사용자 프로그램이 사용하는 함수
사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 가져다 쓰는 함수
- 자신의 프로그램의 실행 파일에 포함되어있다.
커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 = 시스템 콜
- 사용자 프로그램에는 커널함수에 대한 정의가 없고 호출만 가능하다
사용자 정의함수나 라이브러리 함수를 호출시 가상 메모리에서 Code부분내에서 점프하면서 접근하게 된다.
반면에, 커널함수를 실행하게 되면 메모리의 커널영역의 Code부분으로 가야하는데, 점프(이동)는 프로세스의 논리적 주소공간의 Code에서만 가능하다. 물리적 메모리 주소상으로 접근하는 것은 막혀있고, 구현도 안되있다.
따라서, 시스템 콜을 통해 Interrupt line을 세팅해서 CPU제어권을 운영체제에게 넘겨서 커널 함수를 실행하게 된다.
프로그램의 실행
프로그램은 실행 되면서 사용자 정의함수, 라이브러리 함수를 실행하기 위한 User Mode,
커널 함수를 실행하기 위한 Kernel Mode를 번갈아 가면서 실행한다.
'CS > 운영체제 정리' 카테고리의 다른 글
3주차. 프로세스의 연산 - fork(), exec()... 와 IPC (0) | 2021.09.24 |
---|---|
3주차. Thread 정리 (0) | 2021.09.24 |
3주차. Process 정리(문맥교환, 상태, PCB, 스케쥴러) (0) | 2021.09.24 |
2주차. System Structure & Program Execution 1 (0) | 2021.09.17 |
1주차. 운영체제란 무엇인가? (2) | 2021.09.10 |
- Total
- Today
- Yesterday