2021.03.24 - [전체글] - 화일 처리및 응용 공부#8 (화일 입출력 제어)
이전 내용이다.
버퍼 관리
버퍼(Buffer):
- 디스크 화일에서 데이터를 읽어 들이는 메인 메모리의 일정 구역
- 버퍼 관리의 목적 (CPU와 보조 저장장치의 성능과 활용을 최대화)
(데이터를 사용하는 동안 일시적으로 데이터를 보관하는 메인메모리에 일정구역이다.)
버퍼 관리자
- 제한된 메인 메모리의 버퍼공간을 최적으로 분배
- 응용 프로그램의 요구에 따라 버퍼공간 할당
- 할당된 버퍼 중에서 사용하지 않는 버퍼 공간을 관리
- 버퍼 요구량이 할당가능치를 초과 할 경우
- 응용프로그램을 지연
- 우선순위가 낮은 프로그램에 할당된 버퍼공간을 회수
단순 버퍼 시스템(가정)
단순 버퍼
- 하나의 화일에 하나의 버퍼만 할당
- 응용 프로그램의 데이터 요구 시 버퍼로 데이터 블록을 읽어들인다
- 블록에 하나의 레코드가 저장된다고 가정
버퍼의 논리적 구조
버퍼를 채우는 I/O 채널 명령문(채널프로그램) 구조
- 프로그램의 READ 명령이 있을때 대기
- READ 명령이 내려지면 디스크 제어기에 I/O 시작 명령 지시
- 응용 프로그램은 버퍼가 채워질때까지 대기
- 버퍼가 채워지면 인터럽트를 걸어 응용프로그램이 버퍼로 부터 데이터를 읽도록 한다.
예상버퍼링
- 단순버퍼 시스템은 버퍼가 채워질 때까지 CPU가 유휴 상태로 되는 문제가 발생함
- 화일 관리자가 프로그램이 필요로 할것으로 예상 되는 데이터로 버퍼를 미리 채워 놓는것
- 버퍼가 채워졌는지를 표시하는 플래그(full_flag)를 사용
- 예상 버퍼링을 위한 버퍼구조
버퍼링을 위한 채널프로그램
버퍼를 채우고 비우는 채널 프로그램은 생산자와 소비자 루틴 쌍으로 구성됨
입력파일(보조기억창지 -> 버퍼) 에 대해
- 생산자는 I/O채널
- 소비자는 CPU
출력파일(버퍼 -> 보조기억장치) 에 대해
- 생산자는 CPU
- 소비자는 I/O 채널
생산자 루틴(유사코드)
loop: if(to_fill.full_flag = 1) goto loop;
issue start –I/O command to disk-controller;
wait while to_fill.buffer is being filled;
full_flag = 1;
goto_loop;
소비자 루틴(유사코드)
wait: if(to_empty.full_flag = 0) goto wait; //버퍼가 공백이면 대기
read record into work area;
// 버퍼에 있는 레코드 작업구역으로 이동
full_flag=0;
goto wait;
느낀점 : 버퍼(Buffer)의 관련된 내용을 세심히 보아야 겠다.
예상버퍼, 루틴, 이중버퍼, 버퍼 소비자,생산자 뭐 그런 내용등등을 알아보자
'이론공부 > 화일처리및응용' 카테고리의 다른 글
화일 처리 및 응용 공부 #11 (정렬/합병) (0) | 2021.04.20 |
---|---|
화일 처리 및 응용 공부#10 (순차화일) (0) | 2021.03.30 |
화일 처리및 응용 공부#8 (화일 입출력 제어) (0) | 2021.03.24 |
화일 처리및 응용 공부#7 (RAID) (0) | 2021.03.24 |
화일 처리 및 응용 공부#6 (디스크 저장장치 특성) (0) | 2021.03.14 |