[파일 처리] 03 파일 입출력 제어

2022. 4. 9. 14:35·Major/Database
728x90

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의 대기시간을 줄일 수 있음

- 단점 : 생산자나 소비자 루틴의 실행시간과 복잡성이 증가, 메인 메모리의 소요량이 증가

728x90
저작자표시 비영리 (새창열림)

'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
'Major/Database' 카테고리의 다른 글
  • [파일 처리] 05 화일의 정렬/합병
  • [파일 처리] 04 순차 화일
  • [파일 처리] 02 화일 저장 장치
  • [파일 처리] 01 화일의 기본 개념
BeNI
BeNI
코딩하는 블로그
  • BeNI
    코딩못하는컴공
    BeNI
  • 전체
    오늘
    어제
    • Menu (254)
      • My profile (1)
      • 회고 | 후기 (8)
      • Frontend (66)
        • Article (11)
        • Study (36)
        • 프로그래머스 FE 데브코스 (19)
      • Backend (0)
      • Algorithm (58)
        • Solution (46)
        • Study (12)
      • Major (111)
        • C&C++ (23)
        • Java (20)
        • Data Structure (14)
        • Computer Network (12)
        • Database (15)
        • Linux (6)
        • Architecture (3)
        • Lisp (15)
        • OS (1)
        • Security (2)
      • etc (2)
  • 링크

    • 깃허브
    • 방명록
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    C++
    Algorithm
    프로그래머스
    lisp
    파일처리
    백준
    데브코스
    react
    리팩토링
    자료구조
  • hELLO· Designed By정상우.v4.10.2
BeNI
[파일 처리] 03 파일 입출력 제어
상단으로

티스토리툴바