Presentation is loading. Please wait.

Presentation is loading. Please wait.

화 일 구 조 Chapter 3 화일의 입출력 제어.

Similar presentations


Presentation on theme: "화 일 구 조 Chapter 3 화일의 입출력 제어."— Presentation transcript:

1 화 일 구 조 Chapter 3 화일의 입출력 제어

2 1. 입출력 제어 환경 ▶입출력 제어(Input/Output control) 작업은 화일 연산의 비용을
≫3.1 입출력 제어 환경 1. 입출력 제어 환경 ▶입출력 제어(Input/Output control) 작업은 화일 연산의 비용을 결정하는데 매우 큰 비중을 차지하고 있다. ▶운영 체제는 다수의 사용자들을 위해 컴퓨터 시스템의 자원을 관리하는 역할을 담당하는 소프트웨어로서 사용자와 보조 저장 장치 간의 입출력을 제어하여 인터페이스(interface)를 제공하는 것이다. 사용자 프로그램 운영 체제 보조 저장 장치 논리적 관점 물리적 관점

3 ▶화일 관리 시스템은 복잡한 파일에 대한 연산이 프로그래밍 언어를
≫3.1 입출력 제어 환경 입출력 제어 시스템 화일 관리 시스템 장치 관리 시스템 ▶화일 관리 시스템은 복잡한 파일에 대한 연산이 프로그래밍 언어를 사용함으로써 아주 간단한 명령문들로 쉽게 표현되는데 이러한 명령문을 지정된 저급 입출력 명령어들로 바꾸어 주는 역할이다. ▶장치 관리 시스템은 파일에 있는 레코드의 판독이나 기록을 요구할 경우 여러 복잡한 단계의 장치 제어 연산의 지원을 해주는 역할이다. But! 수행되는 작업들의 세세한 절차에 대해서 알 필요 없이 os가 처리 해준다.

4 ▶입출력 제어 시스템의 목적은 컴퓨터 사용자들이 저장 장치의
≫3.1 입출력 제어 환경 ▶입출력 제어 시스템의 목적은 컴퓨터 사용자들이 저장 장치의 특성이나 화일 조직 방법 등에 대한 깊은 지식이 없이도 화일을 접근할 수 있도록 지원하는 기능을 수행하는 것이다. ▶입출력 제어 시스템이 수행해야 할 기능 (1) 화일 식별 및 위치 정보를 가지고 있는 디렉터리를 유지 (2) 메인 메모리와 보조 저장 장치 사이에 데이터가 이동될 수 있는 통로(pathway)를 확립하는 기능 (3) CPU와 보조 저장 장치 사이의 통신 조정 기능 ①CPU(중앙 처리 장치 : Central Processing Unit)가 입출력 연산이 완료되기를 기다리는데 너무 과도한 시간을 허비하지 않도록 두 장치 사이에서 오는 불균형 처리 ②송신자와 수신자가 모두 준비되었을 때 데이터가 전송될 수 있도록 하는 데이터 관리 (4) 입력이나 출력으로 사용될 화일 준비 (5) 입력이나 출력이 완료된 뒤의 화일 관리

5 2. 화일 디렉터리 ▶화일 관리 시스템은 화일 디렉터리(file directory)를 이용하여
≫3.2 화일 디렉터리 2. 화일 디렉터리 ▶화일 관리 시스템은 화일 디렉터리(file directory)를 이용하여 시스템에 있는 화일들을 조직하고 관리한다. ▶이 디렉터리는 시스템에 있는 모든 화일에 대한 이름, 저장 위치, 크기 타입에 대한 정보를 포함하고 있다. SO→사용자는 단지 논리적 디렉터리와 화일 구조에만 관심을 기울이면 되고, 하드웨어적인 화일들에 대한 공간 할당 문제는 시스템이 담당해서 처리한다.

6 ≫3.2 화일 디렉터리 /(루트) bin adb cc yacc usr mydir addr dev condole kbd tape

7 ▶디렉터리는 한 레벨로 구성할 수도 있고 여러 레벨로 구성할 수도 있다.
≫3.2 화일 디렉터리 ▶디렉터리는 한 레벨로 구성할 수도 있고 여러 레벨로 구성할 수도 있다. ▶서브 디렉터리(subdirectory)는 각기 다른 디스크 또는 테이프 등의 장치에 저장된 화일 ▶화일을 식별하기 위해서는 경로 이름(pathname)을 사용 한다. /mydir/addr의 처음 ‘/’는 루트 디렉터리를 디렉터리를 나타나고 다음 ‘/’는 디렉터리와 화일을 분리하기 위해 사용되었다. ▶디렉터리의 가장 기본이 되는 것은 심벌 테이블(symbol table)이다. 이것은 모든 화일에 심벌 이름을 부여하고 이 이름으로 화일을 찾도록 하는 것이다.

8 ▶디렉터리를 이용한 연산 ≫3.2 화일 디렉터리 ①탐색 : 특정 이름의 화일을 찾기 위해서 디렉터리를 탐색할 수 있어야 한다.
②화일 생성 : 새로운 화일이 생성될 때 그 화일을 디렉터리 엔트리로 첨가한다. ③화일 삭제 : 더 이상 필요 없는 화일을 디렉터리로부터 삭제한다. ④리스트 디렉터리 : 디렉터리의 내용을 보여줄 수 있어야 하고, 리스트 내의 각 화일에 대한 디렉터리 엔트리의 값을 보여줄 수 있어야 한다. ⑤백업 : 신뢰도를 위해서 일반적으로 화일 시스템들은 일정한 시간 주기로 백업 화일을 생성하는데 보통 자기 테이프에 화일들을 복사해서 저장해 둔다. 이것은 시스템이 장애를 일으키거나 단순히 그 화일을 더 이상 접근할 수 없게 되는 경우에 대비해서 예비 사본(backup copy)을 유지하기 위해서이다.

9 3. 입출력 장치 제어 ▶ 메인 메모리와 보조 저장장치 또는 라인 프린터와 같은 입출력 장치 ▶데이터의 판독/기록 작업 과정
≫3.3 입출력 장치 제어 3. 입출력 장치 제어 ▶ 메인 메모리와 보조 저장장치 또는 라인 프린터와 같은 입출력 장치 사이의 데이터를 물리적으로 전송하는 것을 입출력 작업이라고 한다. ▶데이터의 판독/기록 작업 과정 i) 원하는 화일의 위치 탐색 (디렉터리) ii) 메인 메모리와 입출력 장치 사이에 경로 설정 iii) 경로상의 요소들을 사용할 수 있는지 검사 iv) 입출력 장치에 I/O 연산 신호를 보냄 ★ 신호를 받은 장치 장치를 준비 I/O 작업 도중에 발생하는 오류에 대처 I/O 연산 뒤에 I/O 요청 장치에 작업의 성공 여부를 보고

10 ≫3.3 입출력 장치 제어 ▶대부분이 컴퓨터 시스템의 CPU는 입출력에 관한 작업의 처리에 관여하지 않고 I/O 채널 이라고 하는 I/O 처리기에 위임하여 대신 장치 제어 기능을 수행하도록 하고 있다. ▶I/O 채널 자체는 채널 프로그램으로 작동되는 일종의 컴퓨터이고, 여기서 채널 프로그램이라고 하는 것은 I/O 채널이 실행하는 프로그램으로 장치에 대한 접근이나 데이터 경로 제어에 필요한 연산들이 명세 된 것이다. CPU 메인 메모리 채널 장치 제어기 장치 1 장치 2 채널 장치 제어기 장치 3 장치 n ▶I/O 채널은 장치제어기를 통해 간접 제어

11 ▶CPU는 몇 개의 간단한 명령어를 사용하여 I/O채널과 통신을 한다.
≫3.3 입출력 장치 제어 ▶CPU는 몇 개의 간단한 명령어를 사용하여 I/O채널과 통신을 한다. ①입출력 검사 : 지정된 장치까지의 경로가 사용 중인지 여부를 결정 한다. ②입출력 개시 : 특정 장치의 입출력을 시작하게 한다. ③입출력 중지 : 특정 장치의 입출력을 중지시킨다. ▶작업이 완료되면 인터럽트(interrupt)를 통해 CPU에 통보 인터럽트는 불법적인 CPU 명령과 같은 오류 검출 시나 I/O 작업 완료 시에 발생 인터럽트가 발생하면 OS는 인터럽트 처리 루틴으로 제어를 전달, 인터럽트 발생 원인을 규명하고, 적절한 조치 후 원래의 루틴으로 제어를 반환함

12 4. 화일의 입출력 ▶ 화일 기록 연산 -프로그램에서 WRITE는 OS를 호출해서 작업을 수행한다.
≫3.4 화일의 입출력 4. 화일의 입출력 ▶ 화일 기록 연산 -프로그램에서 WRITE는 OS를 호출해서 작업을 수행한다. -물리적 기록은 OS가 담당한다. ▶화일에 관련된 작업과 입출력 장치를 취급하는 프로그램들을 화일 관리자라 한다. ▶화일 관리자는 화일의 논리적 특성이 지금 작업을 하려고 하는 화일과 일치 하는지를 검사하는 작업부터 시작한다. 화일을 테이블에서 조사해서 이 화일이 개방되어 있는지, 레코드를 송신할 화일이 어떤 타입인지, 화일의 소유자가 누구인지 그리고 이 특정 화일의 사용자가 어떤 접근 권한을 가지고 있는지를 알아 낸다.

13 ▶ 프로그램의 WRITE 연산 수행 단계 ≫3.4 화일의 입출력
1) 프로그램의 Write : 운영 체제에 기록 연산(화일 F에 레코드 r)을 요청 2) 운영 체제 : 화일 관리자에게 작업 지시 3) 화일 관리자 : 화일 F의 개방 여부, 접근 허용 여부, 물리적 화일 검사 4) 화일 관리자 : r에 대한 블록의 물리적 위치 탐색 (화일 할당 테이블(FAT)을 이용) 5) 화일 관리자 : 블록이 메인 메모리 I/O 버퍼에 존재 유무 확인, 레코드 r 을 기록 6) 화일 관리자 : I/O 채널에 블록 위치와 디스크 기록 위치를 지시 7) I/O 채널 : 디스크 드라이브의 수신 가능 상태를 검사하고 데이터를 변환 8) I/O 채널 : 표현한 데이터를 디스크 제어기에 전송 9) 디스크 제어기 : 디스크 드라이브에 헤드를 적절한 트랙, 블록에 위치하도록 지시하고 한 비트씩 전송

14 ▶화일 관리자는 레코드 r이 기록될 블록이 이미 메인 메모리에 있는지 아니면
≫3.4 화일의 입출력 ▶화일 관리자는 레코드 r이 기록될 블록이 이미 메인 메모리에 있는지 아니면 메모리로 읽어 들여와야 하는지를 결정해야 한다. 만일 블록을 읽어 들여와야 한다면 화일 관리자는 가용할 수 있는 시스템 I/O 버퍼 공간을 확보한 뒤에 디스크로부터 이 블록을 판독한다. 즉 I/O 버퍼에서는 화일 관리자가 레코드 크기나 블록 크기로 데이터를 읽거나 쓸 수 있다. ▶ I/O 채널과 디스크 제어기 》채널 명령어 -I/O 채널은 프로그램으로 데이터 교류를 지시 -CPU는 데이타 전송을 위해 I/O 채널에 채널 프로그램 실행을 지시 -I/O 채널은 비정상적인 상황을 처리하기 위하여 인터럽트 발생 -채널 프로그램과 디스크의 속도 조절을 위해 wait loop를 활용 》디스크에 대한 채널 프로그램 구성 명령어 -Search : 요구하는 데이터를 디스크에서 탐색 -Read : 레코드를 판독해서 메인 메모리 버퍼로 전송 -Write : 메인 메모리 버퍼로부터 데이터를 디스크로 전송 -Wait : 앞의 연산이 끝날 때까지 다음 read/write 명령어의 실행을 지연

15 If! 비정상적인 상황이 발생하면 대부분의 I/o채널은 단순히 모든 가능한 상황을 처리할 수
≫3.4 화일의 입출력 》출력(기록) 연산 수행 단계 ①데이터 전송을 위한 장치, I/O채널, 디스크 제어기를 선정 ②CPU가 채널 프로그램을 기동 ③I/O 채널은 메모리의 데이터를 요청하고 디스크 제어기로 데이터가 전송되도록 제어 ④디스크 제어기는 디스크 드라이브에 적합한 형식으로 데이터를 코딩하여 전송 ⑤디스크 드라이브는 데이터 기록 If! 비정상적인 상황이 발생하면 대부분의 I/o채널은 단순히 모든 가능한 상황을 처리할 수 있는 충분한 메모리를 가지고 있지 않다. 그렇기 때문에 인터럽트(interrupt)라는 메시지를 CPU에 보내서 도움이 필요하다는 것을 알린다.

16 ≫3.4 화일의 입출력 ▶ 장치 제어기의 기능 채널 명령어(search, read, write 등)를 그 장치에 적합한 연산으로 번역해서 실행을 지시한다. I/O 채널이나 화일 관리자에게 상태 정보를 제공 장치 준비 여부, 데이터 전송 완료 등 호스트 컴퓨터와 장치 사이의 데이터 변환 호스트 : 비트들의 병렬 전송 I/O 장치 : 비트들을 직렬 전송 데이터 전송시 에러 검사와 교정 패리티 체크(parity check)의 제거와 복원 에러 교정을 위한 코드 CC(cyclic check charaters), CRC(cyclic redundancy check charaters), ECC(error correction code) 등의 검사, 제거, 복원

17 ▶ 화일의 개방과 폐쇄 ≫3.4 화일의 입출력 》화일의 개방(OPEN)
- OPEN 문이나 첫 번째 READ 혹은 WRITE문과 연계하여 수행 ① 오퍼레이터에게 테이프 릴이나 디스크 등의 준비를 요구 ② 필요한 채널 프로그램의 골격을 구성 ③ 레이블을 검사하여 화일이 입력을 위한 것인지 출력을 위한 것인지 확인 ④ 화일을 접근하는 사용자의 권한 검사 ⑤ 화일을 위한 버퍼 구역을 구성 ⑥ 입력 화일에 대해 예상 버퍼링을 하는 경우라면 첫 번째 버퍼를 채움 ⑦ 화일 디렉터리에 화일 제어 정보를 기록

18 ▶ 화일의 개방과 폐쇄 ≫3.4 화일의 입출력 》화일의 폐쇄(CLOSE) CLOSE문이나 프로그램 종료 시 자동으로 수행
나중에 다른 프로그램이 이 화일을 다시 사용할 수 있도록 준비함 i) 출력을 위한 버퍼 구역을 비움 ii) 할당된 버퍼와 채널 프로그램이 차지했던 메모리 구역을 반환 iii) 출력 화일에 화일 끝 표시(end-of-file mark)와 꼬리(tailer) 레이블을 기록 iv) 저장 매체를 정리(rewind, dismount 등)

19 ≫3.5 버퍼 관리 5. 버퍼 관리 ▶디스크 화일에서 데이터를 읽어 들이는 메인메모리의 일정한 구역을 버퍼(buffer) 라고 하며, CPU와 보조 저장장치의 성능과 활용을 최대화 시킨다. ▶제한된 버퍼 공간을 최적으로 사용하기 위해서 버퍼 관리자(buffer manager)는 응용 프로그램의 요구에 따라 버퍼 공간을 할당한다. If! 버퍼 요구량이 할당 가능 공간을 초과할 시 ① 응용 프로그램을 지연시킨다. ② 우선순위가 낮은 프로그램에 할당된 버퍼공간을 회수한다. ▶화일 관리 시스템이 사용하는 블록의 크기와 OS가 버퍼에 사용하는 페이지 크기를 동일하게 함으로서, 메모리 할당으로 일어나는 단편(fragmentation)을 최소화 시킨다.

20 ▶ 단순 버퍼 시스템 ≫3.5 버퍼 관리 》단순 버퍼 ①하나의 화일에 하나의 버퍼만 할당
②응용 프로그램의 데이타 요구 시(on demand) 버퍼로 데이타 블록을 읽어 들임 ③블록에 하나의 레코드가 저장된다고 가정 버퍼 데이터 구역 버퍼 채널 프로그램의 시작 i) 프로그램의 READ 명령이 있을 때까지 대기 ii) READ 명령이 내려지면 디스크 제어기에 I/O 시작 명령을 지시 iii) 응용 프로그램은 버퍼가 채워질 때까지 대기 iv) 버퍼가 채워지면 인터럽트를 걸어 응용 프로그램이 버퍼로부터 데이타를 읽도록 함

21 ▶ 단순 버퍼 시스템 ≫3.5 버퍼 관리 》예상 버퍼링(anticipatory buffering)
①버퍼가 채워질 때까지 CPU(사용자 프로그램)가 유휴 상태(idle)로 되는 문제가 발생 ②화일 관리자가 프로그램이 필요로 할 것으로 예측되는 데이터로 미리 버퍼를 가득 채워 놓음(prefetching) ③CPU는 버퍼가 채워질 때까지 기다릴 필요가 없음 ④버퍼가 채워졌는지를 표시하는 플래그(full-flag)를 사용 버퍼 채널 프로그램의 시작 full-flag 단, 버퍼가 공백이면 full_flag = 0 버퍼가 채워져 있으면 full flag = 1 버퍼 데이터 구역

22 ▶ 단순 버퍼 시스템 ≫3.5 버퍼 관리 》버퍼링을 위한 채널 프로그램
버퍼를 채우고 비우는 채널 프로그램은 생산자(producer)와 소비자(consumer) 루틴 쌍으로 구성됨 입력 화일에 대해 생산자는 I/O 채널 소비자는 CPU(응용 프로그램) 출력 화일에 대해 생산자는 CPU(응용 프로그램) 소비자는 I/O 채널

23 ▶ 단순 버퍼 시스템 ≫3.5 버퍼 관리 》하나의 블록에 n개의 레코드(Bf = n)
이동해서 처리되는데 이것을 디블로킹(deblocking)이라고 한다. ▶ 디블로킹을 위한 포인터로 record_counter가 사용된다. 버퍼 채널 프로그램의 시작 단 버퍼가 공백이면 full_flag = 0 그렇지 않으면 full flag = 1 record_counter = 1,…,n full_flag record_counter n개의 레코드로 된 블록 데이터 구역

24 but! 버퍼가 비워 있거나 채워지고 있는 중이면 full_flag = 0
≫3.5 버퍼 관리 ▶ 이중 버퍼 시스템 화일 당 2개의 버퍼를 할당하여 운영하는 방법으로 첫 번째 버퍼가 공백이 되었을 때 두 번째 버퍼는 이미 채워져 있어야 한다. 그러므로 기다리는 시간이 없이 곧 바로 두번 째 버퍼를 다시 비울 수 있게 된다. 생산 연산과 소비 연산이 순환적으로 반복되면서 병행적으로 수행되는 과정이다. 버퍼1 버퍼2 next_buffer next_buffer channel_program channel_program full_flag full_flag 채널 프로그램의 시작 record_counter record_counter 블록 데이터 구역 블록 데이터 구역 but! 버퍼가 비워 있거나 채워지고 있는 중이면 full_flag = 0 버퍼가 채워져있거나 비워지고 있는 중이면 full_flag = 1 record_counter = 1,…,n

25 6. Unix에서의 입출력 ≫3.6 Unix에서의 입출력 화일 기술자 테이블
UNIX 에서는 화일을 단순히 일련의 바이트(sequence of bytes)로 가정 디스크 화일, 키보드, 콘솔 등 물리적 장치도 모두 화일로 취급 하나의 UNIX 화일은 하나의 정수(integer)로 표현되는 화일 기술자로 표현 각 프로세스가 사용하는 화일들을 나타내는 테이블이다. 이 테이블의 각 엔트리는 화일 기술자와 개방 화일 테이블의 한 엔트리를 가리키는 포인터를 포함하고 있다. 화일 기술자 테이블 현재 시스템에서 사용 중인 모든 개방된 화일에 대한 엔트리 들을 포함하고 있다. 각 엔트리에는 그 화일이 어떻게 사용될 수 있는지에 대한 중요한 정보를 포함하고 있다. 즉, 허가된 판독/기록 형식, 이 화일을 현재 사용하고 있는 프로세스 수, 다음 판독이나 기록을 위해 사용될 화일에서의 오프셋 등이 포함되어 있다. 개방 화일 테이블

26 shell 이란? 사용자와 unix사이의 인터페이스를 제공하는 command interpreter
》프로세스(processes) -실행하고 있는 프로그램 -Unix의 최상위 I/O계층의 구성요소로서 화일을 논리적으로 취급 -Shell루틴, 라이브러리 루틴, 사용자 프로그램 shell 이란? 사용자와 unix사이의 인터페이스를 제공하는 command interpreter 》커널(kernel) -프로세스 계층 이하의 모든 하부계층을 통합 모든 I/O를 바이트 순열 위에서의 연산으로 취급

27 ▶ Unix 화일 I/O ≫3.6 Unix에서의 입출력 디스크 화일에 하나의 문자를 기록한다고 가정하면,
- 응용 프로그램이 화일에 하나의 문자를 기록하라는 명령문 write (fd, &ch, 1) 을 실행하면 시스템 호출 인터페이스(system call interface)를 통해 커널이 즉시 기동됨. system call interface 이란? 프로세스가 커널과 직접 통신하도록 해주는 루틴 - 커널 I/O 시스템은 화일 이름을 화일 시스템의 화일과 연결시키는 것으로 작업을 시작. 이 때 4개의 테이블을 이용한다.

28 ▶ Unix I/O를 위한 테이블 ≫3.6 Unix에서의 입출력
1. 화일 기술자 테이블(file descriptor table) 각 프로세스가 사용하는 화일 기록 테이블 프로세스당 하나의 화일 기술자 테이블 2. 개방 화일 테이블 (open file table) 현재 시스템이 개방하여 사용중인 모든 화일에 대한 엔트리로 구성 엔트리 : 판독/기록 형식, 사용 프로세스 수, 다음 판도/기록 연산을 위한 화일 오프셋, 이 화일 작업에 사용할 수 있는 일반 함수들의 포인터 Unix 시스템 전체에 하나 3. 화일 할당 테이블(file allocation table) 실제로는 인덱스 노드(index node) 구조의 일부 화일에 할당된 디스크 블록 리스트를 포함 4. 인덱스 노드 테이블(index node table) 현재 사용되고 있는 화일 당 하나의 엔트리(inode)로 구성 각 엔트리는 화일과 함께 디스크에 저장되어있는 inode( index node)의 사본 inode에는 화일의 저장 위치, 크기, 소유자 등 화일 접근에 필요한 정보가 저장

29 ▶ Inode 테이블 구조 ≫3.6 Unix에서의 버퍼 관리 inode 테이블 소유자 ID 장치 그룹 이름 화일 유형 접근유형
화일 접근 시간 화일 참조 포인터 수 화일 크기(블록수) 화일 유형 블록 카운트 접근유형 화일 할당 테이블 화일 접근 시간 화일 참조 포인터 수 화일 할당 테이블 화일 크기(블록수) 블록 카운트 화일 할당 테이블

30 ▶ Unix에서의 화일 입출력 ≫3.6 Unix에서의 입출력 Ex) 화일 기술자 값이 3인 화일의 레코드 판독 명령
프로그램의 화일 기술자 테이블에서 개방 화일 테이블을 이용 개방 화일 테이블의 해당 엔트리를 검색 2) 개방 화일 테이블에서 inode 테이블 포인터를 이용, inode 테이블의 해당 엔트리(inode)를 검색 3) inode 테이블에서 해당 화일의 데이터가 저장된 디스크 블록의 주소를 얻어 디스크에서 데이터 블록을 판독

31 ▶ 화일 이름과 디스크 화일의 연결 ≫3.6 Unix에서의 입출력 》디렉터리 구조
i) 화일 이름과 디스크에 저장되어있는 그 화일의 inode에 대한 포인터로 구성 ii) Inode에 대한 포인터는 그 화일 이름으로부터 그 화일에 대한 모든 정보에 대한 직접 참조를 제공 iii) 화일이 개방되면 그의 inode를 메모리(inode 테이블)로 가져오고 개방 화일 테이블에 해당 엔트리를 추가 화일이름 Inode 포인터 Unix 디렉터리

32 감사합니다!


Download ppt "화 일 구 조 Chapter 3 화일의 입출력 제어."

Similar presentations


Ads by Google