[OS] 3. System Structure & Program Execution 2

nang_zz·2022년 10월 6일
0

운영체제

목록 보기
3/3
post-thumbnail

반효경 교수님의 운영체제 강의를 듣고 정리한 게시글입니다.


동기식 입출력과 비동기식 입출력

두 경우 다 I/O의 완료는 인터럽트로 알려줌

동기식 입출력(Synchronous I/O)

I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

1. 구현 방법 1:(Programmed I/O)

  • I/O가 끝날 때까지 CPU를 낭비시킴
  • 매 시점 하나의 I/O만 일어날 수 있음.
  • 인터럽트 x

2. 구현 방법 2:(Interrupt-driven I/O)

  • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
  • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
  • 다른 프로그램에게 CPU를 줌

비동기식 입출력(Asynchronous I/O)

I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감



입출력을 위한 하드웨어 구성에 따라

독립적인 입출력(Isolated I/O = I/O mapped I/O)

CPU와 입출력 장치들이 I/O Bus, CPU와 메모리는 메모리 Bus를 통해 연결되어있다.

I/O instruction이 명령어 집합(Instruction Set)에 따로 추가되므로 제어로직이 복잡해지고, I/O Bus를 장착하는데 추가 비용이 든다.

메모리 주소지정 입출력(Memory-mapped I/O)

입출력 장치들이 메모리와 함께 메모리 Bus에 연결되어 있어 입출력을 위한 instruction을 따로 두어 사용하지 않고, 메모리에 대한 명령어를 사용하여 입출력을 하는 방식

입출력 장치들이 각각 메모리의 번지를 할당받아 그 주소 공간만큼의 메모리를 활용할 수 없는 단점.



저장장치 계층 구조

밑으로 갈수록 용량은 크고, 속도가 느리고, 비용은 낮아진다.

Primary : CPU에서 직접 접근, Volatile(휘발성)
Secondary : CPU에서 직접 접근 X, Non-volatile(비휘발성)

💡 캐싱(Chaching)?
속도 차이를 완충하기 위해서 당장 필요한 정보나 자주 사용되는 정보를 저장해놓는 것, 재사용을 목적으로.



프로그램의 실행(메모리 Load)

프로그램이 File System에 실행 파일 형태로 저장되어 있고, 프로그램을 실행하면 메모리에 올라가 프로세스가 된다.

Virtual Memory

프로그램이 메모리에 바로올라가는 것이 아니라 Virtual Memory를 거친다.

프로그램을 실행시키면 그 프로그램의 독자적인 Address Space(메모리 주소 공간)이 형성되고 Code, Data, Stack 영역으로 구성되어 있다.

Code

CPU에서 실행할 기계어 코드

Data

전역 변수같은 프로그램이 사용하는 자료구조

Stack

Code가 함수 구조로 되어있기 때문에 함수를 호출하거나 리턴 시 데이터를 임시로 저장하는 용도로 사용하는 곳

Virtual Memory에서 주소 변환(Address translation)을 통해 당장 필요한 부분만 물리적인 Memory에 올려 사용하고, 그렇지 않은 부분은 Disk의 Swap area에 내려 놓는다.

💡 Swap area?
메모리 용량의 한계로 연장 공간으로써 디스크에서 사용하는 부분으로 전원이 나가면 내용이 사라진다.



커널 주소 공간의 내용

커널 주소 공간도 마찬가지로 Code, Data, Stack 으로 구성되어있다.

Code

  • 시스템콜, 인터럽트 처리 코드
  • 자원 관리를 위한 코드
  • 편리한 서비스를 제공하기 위한 코드

Data

하드웨어와 프로세스를 관리하기 위한 자료 구조

프로세스를 관리하기 위한 자료 구조인 프로세스 제어 블록인 PCB(Process Control Block)

Stack

OS 역시 함수 구조로 되어있기 때문에 함수 호출하거나 리턴 시 필요한 공간



사용자 프로그램이 사용하는 함수

사용자 정의 함수

자신의 프로그램에서 정의한 함수

라이브러리 함수

자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
자신의 프로그램 실행 파일에 포함되어 있다.

커널 함수

운영체제 프로그램의 함수
커널 함수의 호출 = System Call



프로그램의 실행

유저 모드에서 사용자 정의함수나 라이브러리 함수를 호출하다가 System Call을 하여 커널 함수를 호출하면 커널 모드로 CPU가 동작하고, 끝나면 다시 유저 모드로 CPU가 동작한다.



[보충 참고자료]
김주균, OS? Oh Yes! 누워서 보는 운영체제 이야기

profile
블로그 이전했어요. fine-dev.site

0개의 댓글