1. 입출력 제어 환경
1) 운영 체제
- 다수의 사용자를 위해 컴퓨터의 자원을 관리하는 S/W (인터페이스 역할)
2) 입출력 제어 시스템의 기능
① 화일 디렉터리를 유지
② 주기억장치와 보조기억장치 사이의 데이터 이동통로를 확립
③ CPU와 보조기억장치 사이의 통신 조정 기능
④ 입/출력으로 사용될 화일 준비
⑤ 입/출력 완료 후의 화일 관리
2. 화일 디렉터리
1) 화일 관리 시스템
- 화일 디렉토리 이용하여 화일들을 조직하고 관리
- 화일 디렉토리 : 화일의 이름, 저장 위치, 화일 크기, 화일 타입
2) 화일 디렉토리의 구조
- 계층 디렉토리(서브 디렉토리 포함) ex) UNIX
- 사용자 : 논리적 디렉토리와 화일 구조에만 신경쓰면 된다.
- 시스템 : 화일의 공간할당문제를 담당한다.
3) 디렉토리 구조를 이용한 기본 연산
ⓐ 탐색 : 특정 화일을 찾기 위해 디렉터리 탐색
ⓑ 화일 생성 : 디렉토리에 첨가
ⓒ 화일 삭제 : 디렉토리에서 삭제
ⓓ 리스트 디렉토리 : 디렉토리 내용과 화일에 대한 디렉토리 엔트리 값 표시
ⓔ 백업 : 신뢰도를 위해서 테이프에 예비복사 유지
3. 입출력 장치 제어
1) 데이터를 판독/기록하기 위한 작업
- 요구된 화일의 위치 탐색
- 주기억장치와 접근 장치 사이의 통로 설정
- I/O 연산 신호를 보냄
2) 신호를 받는 장치
- 장치를 준비
- I/O 작업 도중의 오류에 대한 조치
- I/O 연산 수행 후, I/O 요청 장치에 작업의 성공 여부 전달
3) 입출력 채널 : CPU, 메인 메모리 - 장치 제어기 및 각 보조 장치 사이의 중개자 역할
- 하나의 제어장치 : 동일한 장치들로 구성되어야 함
ⓐ 제어 명령어 : cpu -> 채널
- 입출력 검사(TEST I/O) -> 입출력 개시(START I/O) -> 입출력 중지(HALT I/O)
ⓑ 인터럽트 : 채널 -> CPU
- 인터럽트는 I/O 작업 완료 혹은 오류 검출 시 발생
- 인터럽트가 발생하면 OS는 인터럽트 처리 루틴으로 제어 전달
- 인터럽트 발생 원인을 규명하고 적절한 조치 후 원래의 루틴으로 제어 반환함
4) 화일 입력
① 프로그램 화일 READ 요청 시의 작업
⒜ 프로그램의 READ 명령을 만나면 파일 관리자에게 인터럽트 발생
⒝ 화일 관리자가 메인 메모리에 채널 프로그램 구성하고 I/O 채널 지정
⒞ 지정 채널은 이 채널 프로그램을 읽어서 실행
⒟ 지정된 디스크 제어 장치로 적절한 신호 전달
⒠ 디스크 제어기는 신호 해석해서 요청한 데이터 판독할 장치를 제어
⒡ 디스크 드라이브는 데이터 경로 따라 주기억장치의 버퍼 영역으로 이동
⒢ 채널은 인터럽트를 걸어 I/O 연산 완료를 알리고, 프로그램 수행을 재개하도록 OS에게 신호
⒣ 파일 관리자는 제어를 원래의 프로그램으로 반환하여 실행 계속 되도록 함
5) 파일의 개방
- 오퍼레이터에게 테이프 릴이나 이동 가능한 디스크 등을 필요량만큼 준비 요구
- 필요한 채널 프로그램의 골격 구성
- 레이블을 검사해서 화일이 입력을 위해 개방되어 있는지, 출력을 위해 개방되어 있는지 검사
- 화일에 접근할 사용자의 권한 검사
- 화일의 버퍼 구역을 구성하고 플래그에 적당한 초기값을 줌
- 입력 화일에 대해 예상 버퍼링을 하는 경우라면 첫 번째 버퍼를 채움
- 시스템의 화일 디렉터리에 화일 제어 정보를 기록
6) 파일의 폐쇄
- 묵시적으로 프로그램이 끝났을 때 자동적으로 수행
- 나중에 다른 프로그램이 이 화일을 사용할 수 있게 준비
- 출력 화일을 위한 버퍼 구역을 비움
- 버퍼 구역과 채널 프로그램이 차지한 메모리 공간을 반환
- 출력 화일에 화일 끝 표시와 꼬리 레이블을 기록
- 화일 기록 매체를 정리
4. Unix에서의 입출력
1) UNIX 에서는 화일을 단순히 바이트 시퀀스로 가정
- 디스크 화일, 키보드, 콘솔 장치도 화일로 취급
2) 화일 기술자
- 정수로 표현
- 화일 세부 정보를 저장한 인덱스 역할
- 표준 입력 화일 : 0, 표준 출력 화일 : 1, 표준 에러 화일 : 2, 사용자 개방 화일 : 3부터
3) 커널의 I/O 시스템이 관리하는 테이블
- 화일 기술자 테이블
- 개방 화일 테이블
- 인덱스 노드 테이블
- 화일 할당 테이블
4) UNIX에서 화일 입출력
- 화일 기술자 값이 3인 화일의 레코드 판독 명령
① 프로그램의 화일 기술자 테이블에서 개방 화일 테이블을 이용, 개방 화일 테이블의 해당 엔트리 검색
② 개방 화일 테이블에서 inode 테이블 포인터 이용, inode 테이블의 해당 엔트리 검색
③ inode 테이블에서 해당 화일의 데이터가 저장된 디스크 블록의 주소를 얻어 디스크에서 데이터 블록 판독
6. 버퍼 관리
1) 버퍼
- 의미 : 화일에서 데이터를 읽어들이는 주기억장치 내의 일정 구역
- 목적 : cpu와 보조기억장치의 성능과 활용을 최대화
2) 버퍼 관리자
- 제한된 주기억장치의 버퍼공간을 최적 분배
- 사용자의 요구에 따라 버퍼 공간 할당
- 사용하지 않는 주기억 공간을 관리
- 버퍼 요구량이 할당 가능 공간을 초과시 사용자 프로세스를 지연/우선 순위 낮은 프로세스에 할당버퍼 회수
3) 단편에 의한 낭비 최소화하기 위해 버퍼의 크기와 한계를 os의 페이지와 연관 시키는 것이 좋음
4) 메모리 할당 기법
ⓐ 최초적합
ⓑ 최적적합
ⓒ 순환적합
5) 단순 버퍼 시스템 (버퍼가 한개)
ⓐ 버퍼의 데이터 구조(가정) : 1 record/block(Bf=1), 1 buffer/file
ⓑ 버퍼를 채우는 채널 프로그램의 기본 구성
- 프로그램 READ 명령이 있을 때까지 기다림
- 제어 장치에 I/O 시작 명령을 내림
- 버퍼가 채워지기를 기다림
- 프로그램에 인터럽트를 발생시켜서 버퍼로부터 데이터를 읽도록 함
ⓒ 예상 버퍼링 : I/O 제어 시스템을 프로그램이 필요로 할 데이터를 미리 예측해서 항상 버퍼를 가득 채워 놓음
-> 프로그램은 버퍼가 채워질 때까지 기다릴 필요 없음
ⓓ 버퍼 구조
플래그(full_flag) |
버퍼 데이터 구역 |
- 버퍼가 비어있으면 플래그 0, 채워있으면 1 (초기값 0)
ⓔ 예상 버퍼링의 채널 프로그램
⑴ 생성자 루틴 (비어있는 버퍼를 채운다)
⑵ 소비자 루틴 ( 가득찬 버퍼를 소비한다)
ⓕ Bf = n 일때 루틴
- 생성자/소비자 루틴 : 매 n+1번째 READ에만 디스크 접근하여 물리적 판독/기록, 디블로킹
* 디블로킹 : 블록이 버퍼로 읽혀 들어오면 버퍼에 있는 n개의 레코드가 한 레코드 씩 응용 프로그램의 작업구역으로 옮겨져서 처리됨
- 버퍼 구조
⑴ 생성자 루틴
⑵ 소비자 루틴
ⓖ 단순 버퍼 시스템의 단점
- 프로그램이 매 n+1번 째 read를 요청할 때마다 CPU는 버퍼가 다 비워질 때까지 대기 상태에 있음
- 버퍼가 비워지는 동안에 생산자는 버퍼를 채우기 위해 대기 상태임
6) 이중 버퍼 시스템
- 화일당 두 개의 버퍼 구역을 할당 : 하나를 비우는 동안 나머지 버퍼를 채움
① 2개의 버퍼 포인터
- to_fill : 현재 채워지고 있거나 다음에 채워야 할 버퍼으 ㅣ포인터
- to_empty : 현재 비워지고 있거나 다음에 비워져야 할 버퍼에 대한 포인터
- 생산자는 to_fill이 가르키는 버퍼를 채움
- 초기상태 : 두 버퍼가 모두 공백(플래그는 0)
② 2개의 플래그
- to_fill.full flag : 현재 채워지고 있거나 다음에 채워야할 버퍼의 플래그
- to_empty.full flag : 현재 비워지고 있거나 다음에 비워져야 할 버퍼의 플래그
③ 채널 프로그램
⑴ 생산자
⑵ 소비자 (이때 n은 블로킹 인수이다)
④ 장점/단점
- 장점 : 버퍼를 채우고 비우는 작업이 중복되어 병렬로 수행되므로 cpu의 대기시간을 줄일 수 있음
- 단점 : 생산자나 소비자 루틴의 실행시간과 복잡성이 증가, 메인 메모리의 소요량이 증가
'Major > Database' 카테고리의 다른 글
[파일 처리] 05 화일의 정렬/합병 (0) | 2022.04.13 |
---|---|
[파일 처리] 04 순차 화일 (0) | 2022.04.13 |
[파일 처리] 02 화일 저장 장치 (0) | 2022.04.06 |
[파일 처리] 01 화일의 기본 개념 (0) | 2022.04.06 |
[데이터베이스설계] Mysql stored function 피보나치(fibonacci) (0) | 2021.11.18 |