시스템 구조&프로그래밍 실행2

Sirius·2024년 8월 28일
0

동기식 입출력 & 비동기식 입출력

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

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

  • 문제점

    기다리는 동안 1) CPU도 낭비, 2) 매순간 I/O 장치도 하나의 일만 한다.

  • 극복방안

    그 하나의 I/O 작업을 기다리지 말고 프로세스에게 CPU를 준다. 프로세스는 또 다른 인스트럭션을 실행 할 수 있다.

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

I/O가 시작된 후 작업이 끝날 때 까지 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감(해당 프로세스는 요청한 I/O 요청의 결과와 무관하게 다른 인스트럭션을 실행함)

DMA(Direct Memory Access)컨트롤러

각각의 I/O 장치들이 너무 많은 인터럽트를 걸어 CPU가 방해받는다.(상황)
-> 인터럽트 걸릴때마다 CPU가 이 각각의 로컬버퍼에 있는 데이터를 메모리로 옮겨야 하기 때문

이를 대신하여 DMA가 로컬버퍼의 내용을 메모리로 카피하고 인터럽트를 단 한번만 걸어서 메모리에 전부 올려놓았다고 알려준다. 이러면 CPU는 인터럽트 서비스 루틴 (ISR)을 보고 데이터를 처리한다. (I/O의 경우)

DMA컨트롤러가 쓰이는 상황

1) 대량 데이터 전송:

DMA 컨트롤러는 대용량 데이터를 메모리로 효율적으로 전송하는 역할을 하며, 이 과정에서 CPU의 직접적인 개입 없이 데이터 블록을 메모리에 전송한다. 전송이 완료되면, DMA 컨트롤러는 CPU에 인터럽트를 발생시켜 전송이 완료되었음을 알린다.

2) 인터럽트 최소화

예를 들어 하드 드라이브에서 대용량 파일을 읽는 경우, 각 바이트마다 인터럽트를 발생시키는 대신, 큰 데이터 블록이 전송 완료된 후에 단 한 번만 인터럽트를 발생시키는 방식이다. 이는 CPU의 인터럽트 처리 부하를 크게 줄여준다.

특징

1) 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
2) CPU의 중재없이 Device Controller(DMA 컨트롤러)가 Device의 Buffer Storage 내용을 메모리에 Block 단위로 직접 전송
3) 바이트 단위가 아니라 Block 단위로 인터럽트를 발생시킴

  • 대부분의 Device 컨트롤러는 DMA 컨트롤러 기능을 가지고 있다.

I/O를 수행하는 2가지 방법

1) 일반적 I/O (Special Instruction에 의해 수행)

각각의 I/O 장치에는 device address가 부여되고, 메모리에는 memory address가 부여한다.
즉 메모리 주소를 분리하여 I/O는 Special Instruction을 통해 접근하도록 한다.

2) Memory Mapped I/O(I/O 디바이스가 메모리 관련 명령어 공유)

I/O 장치에도 memory address를 부여하여 memory와 I/O 장치 모두 memory address에 접근하는 instruction을 사용한다.

메모리 관련 명령어를 공유한다 -> Memory Mapped I/O
공유하지 않고 Special Instruction 사용한다 -> 일반적인 I/O

저장장치 계층구조

1) 초록

1) CPU가 직접 접근이 가능하다.
2) 휘발성
3) 비쌈

2) 빨강

1) CPU가 직접 접근이 불가능 하다.
2) 비휘발성
3) 쌈

프로그램의 실행


1) 프로그램들이 하드디스크에 파일 형태로 저장됨(비휘발성)
2) 실행 파일들은 자기자신만의 독자적인 가상 주소공간이 만들어짐, 이 주소공간은 프로그램 종료시 사라진다.
3) 가상 주소 공간은 1>스택 2>데이터 3>코드 영역으로 분리된다.

  • 1> 스택: 코드가 함수구조로 되어 있어 데이터를 쌓았다가 함수 호출 시 꺼내가기 위함
    2> 데이터: 전역변수와 같은 자료구조
    3> 코드: CPU에서 실행할 기계어 코드(스택영역의 함수호출, 데이터의 변수 가져다가 씀)

4) 이제 이 가상주소공간에서 당장 필요한 부분만 주소 변환해서 피지컬 메모리에 올린다.(ex> 메모리 절약을 위해 코드영역의 일부분만 올린다)
당장 필요없는 부분은 Swap Area로 간다.

5) 메모리에서 필요 없어지면 Swap Area로 옮긴다.

커널 주소 공간의 내용

1) 스택

사용자 프로그램마다 커널 스택을 따로 둠
ex> 프로세스 A의 커널스택, 프로세스 B의 커널스택

2) 데이터

1) HW 종류마다의 자료구조
2) 프로세스 종류마다의 자료구조(PCB)

3) 코드

1) 자원관리를 위한 코드
2) 편리한 서비스 제공을 위한 코드
3) 시스템 콜, 인터럽트 처리 코드

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

1) 사용자 정의 함수

자신이 프로그램에서 정의

2) 라이브러리 함수

가져다가 씀

3) 커널 함수

운영체제 프로그램의 함수(바로 점프 불가능, 시스템 콜 필요)
커널함수의 호출 = 시스템 콜

프로그램의 실행

프로그램이 종료되면 운영체제는 자원 해제, 상태 업데이트를 한다. 따라서 종료될 때 커널 모드 전환이 필요하다.

0개의 댓글