자료처리 () 2006 년봄학기문양세강원대학교컴퓨터과학과 강의 강의내용 파일의기본개념 (Ch. 1 in 화일구조 ) 파일저장장치 (Ch. 2 in 화일구조 ) 파일의입출력제어 (Ch. 3 in 화일구조 ) 순차파일 (Ch. 4 in 화일구조 ) 파일구조와관련해서는, 기본 concept 위주로강의를진행할예정임 (O/S 나 Device 에깊게 Dependent 한내용은생략함 ) Page 2 1
파일의종류 정보 (Information) 데이타 (Data) D 데이타 (data) (in disk, tape, ) P 처리 (processing) (Computer) I 정보 (information) I = P(D) Object = Variables(Attributes or Data) + Methods(Processing Mechanism) Page 3 주요용어 (1/2) 데이타필드 (field), 속성 (attribute), 데이타항목 (item) 이름을가진논리적데이타의최소단위 ( 예 : 나이필드, 이름속성 ) 특정객체 (object, entity) 의한성질의값 테이블 (table) 의 attribute로이해할수있음 레코드타입 (record type) 논리적으로서로연관된하나이상의데이타필드 ( 항목 ) 들의집합 엔티티타입 ( 예 : 학생 = { 이름필드, 학번필드, 성별필드, }) 레코드인스턴스 (record instance) 레코드타입의각필드에따라실제값이들어가어떤특정객체를나타내는것 일반적으로레코드 (record) 라고함 ( 예 : { 홍길동, 2005012345, 남, }) 화일구조 에서는 record occurrence라정의하였음 Page 4 2
주요용어 (2/2) 파일 (file) ( 보조 ) 기억장치에저장된같은종류의레코드집합 (set of records) 하나의응용목적을위해함께저장된레코드 ( 예 : 급여, 인사, 재고, 재무, 회계등 ) 데이타의집합을 ( 일반적으로는 ) 왜파일로구성하는가? 주기억장치 (main memory) 에전부적재하기에는데이타양이너무많다. 프로그램은특정시간에데이타집합의일부만을접근한다. 자원이용의효율성을위하여, 데이타전부를주기억장치에한꺼번에저장시킬필요가없다. 데이타를특정프로그램의수행과독립적으로보관시켜데이타의독립성 (independency) 유지하기위함이다. ( 여러응용프로그램이공용하기쉽다.) Page 5 기능에따른파일의분류 (1/3) 기능에따른파일의종류 마스터파일 (master file) 트랜잭션파일 (transaction file) 작업파일 (work file) 프로그램파일 (program file) 기타 : 보고서파일 (report file), 텍스트파일 (text file) 마스터파일 (mater file) 어느한시점에서조직체의업무에관한정적인면을나타내는데이타의집합 제조회사의예 : 급여마스터파일, 고객마스터파일, 인사마스터파일, 재고마스터파일, 자재요청마스터파일 현재시점의정보를표현하는파일 ( 레코드의집합 ) 로볼수있음 비교적영구적 (permanent) 인데이타를포함하기도함 ( 특수예 : 사전 ) Page 6 3
기능에따른파일의분류 (2/3) 트랜잭션파일 (transaction file) 마스터파일의변경내용을모아둔파일혹은마스터파일을변경 (update) 하기위한데이타파일 새로운레코드의삽입 (insert) 기존레코드의삭제 (delete) 기존레코드의내용수정 (modify, replace) 트랜잭션이란? 논리적인작업단위 ( 예 : 입학처리트랜잭션, 이자율계산트랜잭션 ) 일련의조회및변경연산으로구성됨 하나의건수로처리되어야하며분리될수없는단일작업 (All done or not done) Page 7 기능에따른파일의분류 (3/3) 작업파일 (work file) 한프로그램에서생성한 ( 출력 ) 데이타를다른프로그램의 ( 입력 ) 데이타로사용하기위하여임시로만든파일 임시파일 (temporary file) 이라고하며, 프로그래밍과정에서자연스럽게자주사용하는기법임 작업파일의예 시스템이자동으로만드는작업파일 : Merge Sort 등의정렬을위한파일 프로그램이만드는작업파일 : 수강신청변경파일 프로그램파일 (program file) 데이타를처리하기위한명령어들을저장하고있는파일 고급언어 (C, Java), 어셈블리어, 데이타베이스질의어 (SQL 언어 ) 등 Page 8 4
사용목적에따른파일의분류 입력파일 (input file): 프로그램의입력으로사용되는파일로서, 일반적으로프로그램이읽기 (read) 만을하는파일출력파일 (output file): 프로그램이출력에사용하는파일로서, 일반적으로프로그램이쓰기 (write) 만을하는파일입출력파일 (input & output file): 프로그램에서입력및출력의두목적으로사용하는파일로서, 읽기연산및쓰기연산이모두적용되는파일 input & output file input file program output file Page 9 파일의기본연산 생성 기록 레코드내용의갱신 (update) 새로운레코드삽입 (insert) 기존레코드삭제 (delete) 판독 삭제 fopen(, O_CREAT) write( ), fprintf( ), read( ), fscanf( ), unlink( ) 개방과폐쇄 fopen( ), fclose( ), open( ), close( ), 버퍼의할당과반환 Page 10 5
파일구조선정요소 (1/4) 파일구조선정의주요자원비교 주기억장치 (main memory) - 특정데이타를찾기위한최대비교연산횟수등으로평가 - 데이타접근시간은모두일정한것으로가정 (random access) 보조저장장치 (secondary storage) ( 파일구조선정의주요고려자원 ) - 데이타액세스시간이주기억장치에비해매우긴특성을가짐 - 일반적으로보조저장장치의접근횟수가프로그램성능의평가요소가됨 파일구조선정의주요요소 가변성 (volatility) 활동성 (activity) 사용빈도수 (frequency of use) 응답시간 (response time) 파일크기 (file size) 파일접근유형 Page 11 파일구조선정요소 (2/4) 가변성 (volatility) 파일의성격 - 내용이변하지않는정적파일 ( 주로보관및검색이목적인과거의기록 ) - 내용이자주변하는동적파일 ( 잦은변경이있는현재의상황데이타 ) 가변성 - 전체레코드수에대해추가혹은삭제되는레코드수 - 가변성이높은 ( 추가및삭제가많은 ) 동적파일은빠른접근과갱신이필요 활동성 (activity) 주어진기간동안에파일의총레코드수에대해액세스가일어난레코드수의비율 가변성이 Update 비율인반면, 활동성은액세스비율을나타냄 활동성이높으면 ( 대부분의레코드가액세스된다면 ) 순차파일구조가유리 Page 12 6
파일구조선정요소 (3/4) 사용빈도수 (frequency of use) 파일의사용빈도수 - 일정기간동안의파일사용빈도수 ( 파일이얼마나사용되는지를나타냄 ) - 가변성과활동성에밀접히관련 ( 가변성 / 활동성이높으면일반적으로빈도수가높음 ) 사용빈도수와파일구조 - 빈도수가낮으면순차파일구조가유리 (sequential access) - 빈도수가높으면임의접근구조가유리 (random access) 응답시간 (response time) 검색이나갱신에대해요구하는지연시간 빠른응답시간의요구조건에는임의접근구조를선택 응답시간이 strict하지않은경우에는순차파일구조를선택 실시간 (real-time) 조건이주어지는경우, 응답시간은매우중요한설계요소가됨 Page 13 파일구조선정요소 (4/4) 파일크기 (file size) 레코드수와각레코드길이가파일의크기를결정 (trivial) 시간이지남에따라파일크기가성장 ( 레코드길이확장, 레코드개수증가 ) 성장을유연하게수용할수있는구조의채택이필요 (free space 유지등 ) 파일접근유형 파일에적용되는연산의유형과접근형식에따라파일구조를결정 접근유형의예제 - 판독위주접근 vs. 갱신위주접근 - 순차접근위주 vs. 임의접근위주 Page 14 7
강의 강의내용 파일의기본개념 (Ch. 1 in 화일구조 ) 파일저장장치 (Ch. 2 in 화일구조 ) 파일의입출력제어 (Ch. 3 in 화일구조 ) 순차파일 (Ch. 4 in 화일구조 ) Page 15 파일저장장치의특성 저장장치 (storage device) 저장매체 (medium) + 매체에데이타를저장하고검색하기위한장치 (device) 예 : physical disk + disk controller 저장매체 (storage media) 데이타를저장하는물리적재료 (physical disk) 소멸성 (volatile) vs. 비소멸성 (nonvolatile) disk vs. memory 접근장치 (access device or access mechanism) 데이타를판독 (read) 하거나기록 (write) 하는장치 ( 혹은방법 ) 예 : disk controller(driver), tape driver Page 16 8
저장장치 (memory & storage) 1 차저장장치 (primary storage) 주기억장치 (main memory) - 데이타액세스시간이일정하고 ( 디스크등에비해 ) 매우빠름 - 프로그램 / 데이타처리를위한작업공간 캐시메모리 (cache memory) - 주기억장치의성능을향상시키기위한목적으로, CPU Chipset 내에구현되기도함 - 주기억장치보다빠른액세스속도를가지며, 최근에는캐시메모리자체도 Primary(L1 Cache), Secondary(L2 Cache) 로구분되기도함 2 차저장장치 (secondary storage) 자기디스크 (magnetic disk) - 데이타액세스시간일일정하지않고 ( 메모리에비해 ) 액세스시간이느림 - 용량이크고싸서주로파일의저장에사용됨 - 저장된데이타는주기억장치를거쳐 ( 메모리에올라와 ) CPU에의해처리됨 광디스크 (optical disk), 자기테이프 (magnetic tape) 등 Page 17 저장장치의유형 (1/3) 캐시메모리 (cache memory) 가장빠르고가장비싼저장장치 SRAM(Static Random Access Memory) 을주로사용함 일부캐시의경우는 CPU Chipset 내에구현되어고성능을보장함 현재수십 KB ~ 수 MB 수준의용량이제공됨 주기억장치 (main memory) 프로그램실행과이에필요한데이타유지공간 ( 프로그램이로딩되는공간이며, 프로그램이사용하는데이타가로딩되는공간이기도함 ) DRAM(Dynamic Random Access Memory) 을주로사용함 저용량, 소멸성 ( 데이타저장에는부적함 ) 현재수백 MB ~ 수십 GB 수준의용량이제공됨 Page 18 9
저장장치의유형 (2/3) 플래시메모리 (flash memory) 고밀도, 고성능메모리로서비소멸성 (nonvolatile) 의특성을가짐 주기억장치와비슷한액세스속도를보임 핸드폰, MP3 Player, PDA 등에서디스크 / 메모리역할을수행함 현재수 MB ~ 수 GB 수준의용량이제공됨 자기디스크 (magnetic disk) 데이타 ( 파일 ) 저장장치의주된매체로사용되고있음 데이타처리와기록을위해서는주기억장치를거쳐야함 ( 버퍼를통해서이루어짐 ) 고용량이며, 비소멸성의특징을가짐 현재수십 GB ~ 수십 TB 수준의용량이제공됨 (disk array를구성하여사용 ) Page 19 저장장치의유형 (3/3) 광디스크 (optical disk) 광학적으로저장, 레이저로판독 용량이크고, 보존기간이긴특성을가짐 CD-ROM, CD-R, CD-RW, DVD(digital video disk), DVD-ROM 자기테이프 (magnetic tape) 데이타의백업과보존을위한저장매체 순차접근이적용되는대표적인저장장치 테이프쥬크박스 ( 대용량데이타저장가능 ) 은행, 통신등에서는주기적인백업을위하여자기테이프를널리활용함 Page 20 10
저장장치의계층 고 캐시메모리 메인메모리 저 비용 플래시메모리자기디스크광디스크자기테이프 접근속도 저 고 Page 21 하드디스크 (Hard Disk) (1/2) 자기디스크의종류 하드디스크 (hard disk): 1995년 IBM에서개발 초기 5MB 유연한디스크 (flexible disk): floppy disk, diskette (~1.44 MB) 디스크의구성 갭 (gap): 자기화되지않은영역으로서섹터를구분하는구분자역할을함 트랙 (track): 갭 (gap) 으로분리된 ( 하나의원을구성하는 ) 섹터들로구성 섹터 (sector): 기록과판독작업의최소단위 (block 크기에대응됨 ) 실린더 : 여러디스크로디스크팩 (disk pack) 이형성되었을때, 지름이같은트랙의모음 track sector gap cylinder Page 22 11
하드디스크 (Hard Disk) (2/2) 데이타액세스시간의구분 디스크에서데이타를읽거나, 디스크에데이타를쓰기위해서는 1) 원하는실린더 ( 또는트랙 ) 을찾아야하고 ( 디스크헤드의좌우이동 ), 2) 원하는섹터를찾아야하며 ( 디스크회전이동 ), 3) 원하는양만큼데이타를전송해야한다. Seek time(= s): 원하는데이타가있는실린더 ( 혹은트랙 ) 에디스크헤드를위치시키는데걸리는시간 Rotational latency( = r): 실린더를찾은후, 원하는섹터에헤드를위치시키기위해디스크가회전하는시간 Transfer time(= t): 섹터 ( 와갭 ) 들이헤드밑을회전하며데이타를전송하는시간 Transfer rate: 초당데이타가전송되는속도 (MBps) 파일시스템 ( 혹은저장시스템 ) 의설계자는 seek time 과 rotational time 을최소화하도록데이타구조의설계를진행하여야함 (clustering, locality, ) Page 23 플로피디스크 (Floppy Disk) 유연한디스크 (flexible) 저장장치 1970년경 IBM에서개발 직경 : 5¼ inch, 3½ inch 회전속도 : 360 rpm (c.f., 5400 ~ 10K rpm in hard disks) 과거 ( 수년전 ): 네트워크가연결되지않은컴퓨터간의파일이동을위한가장유용한장치로각광받았음 ( 한장에 1K 원대 ) 현재?: 용량및액세스속도문제로인하여 CD-ROM 및 USB Driver 에그자리를거의빼앗긴상태임 ( 열장에수 K 원대 ) Page 24 12
블로킹 (Blocking) (1/5) 블록 (block) 데이타전송의단위 ( 디스크와메모리사이의최소전송단위 ) 트랙길이 = b x B - b = number of blocks in a track - B = block size ( 블록크기 ) 블록크기 트랙길이 블록크기 과거 : 512 bytes, 1024 bytes, 2048 bytes 현재 : 4096 bytes, 8192 bytes, more 단, 너무크면불필요한데이타전송및메모리효율성저하가발생함 ( 예를들어, 블록크기가 8KB이면, 1 byte를저장하려해도8kb가필요할수있고, 1 byte만전송하려해도8kb를전송해야한다.) Page 25 블로킹 (Blocking) (2/5) 블로킹 (blocking) 기억공간과 I/O 효율을위하여, 몇개의논리적레코드를하나의물리적레코드 ( 블록 ) 에저장시키는것 ( 즉, 레코드들을블록에저장시키는것을블로킹이라함 ) 블로킹인수 (blocking factor) B f = B/R - B = 블록크기 (block size) - R = 레코드크기 (fixed or variable) 블로킹은 I/O 시간을감소시키는장점 (bulk read & write) 이있는반면에, fragmentation 에의해저장공간이감소하는단점이있음 블로킹방법 고정길이블로킹 (for fixed length records) 신장된 (spanning) 가변길이블로킹 : 가변길이레코드를지원하되, 한레코드가인접한블록에걸쳐서저장 비신장된가변길이블로킹 : 가변길이레코드를지원하되, 한레코드는반드시하나의블록에저장 Page 26 13
블로킹 (Blocking) (3/5) R1 R2 R3 R4 R5 R6 R7 R8 트랙 1 트랙 2 고정길이블로킹 R1 R2 R3 R4 R4 R5 R6 트랙 1 R6 R7 R9 R9 R10 R11 R12 R13 트랙 2 신장된가변길이블로킹 R1 R2 R3 R4 R5 트랙 1 R6 R7 R8 R9 R10 트랙 2 비신장가변길이블로킹 Page 27 블로킹 (Blocking) (4/5) 레코드와블록 고정길이블로킹 : 길이만알면레코드구분이가능함 (n번째레코드시작 = n x R or (n-1) x R) 가변길이블로킹 - 분리표시 : 레코드끝마크 (end-of-record marker) 삽입 - 각레코드앞에길이지시자 (length indicator) 관리 - 위치테이블 (position table) 관리 저장시스템에서는 attribute에대해서는길이지시자를관리하고, record에대해서는위치테이블을관리하는 hybrid 방법을주로사용함 레코드설계시고려사항 메모리바이트주소특성 (4-byte 단위, 8-byte 단위 ) 레코드헤더의관리 0 이름주소성별생년월일 0 32 288 292 304 (a) 학생레코드레이아웃 레코드헤더 이름주소성별생년월일 12 44 300 304 316 (b) 레코드헤더가추가된학생레코드레이아웃 Page 28 14
블로킹 (Blocking) (5/5) 블로킹의고려사항 적재밀도 (loading density) - 갱신을위한자유공간 (free space) 할당 ( 레코드의크기증가및레코드의삽입을고려하여일정비율의 dummy space를유지함 ) - 실제데이타저장공간에대한 ( 자유공간을포함한 ) 총공간과의비율 균형밀도 (equilibrium density) - 레코드자체의확장과축소에따른레코드의이동빈도, 단편화등의척도 - 상당히긴기간동안시스템을운용하고안정시킨뒤에예상되는저장밀도 집약성 (locality) - 논리적으로연관된레코드들이물리적으로가깝게위치하는정도 - 예 : 학번이유사한학생의레코드는동일블록내에있거나근접한블록에존재하는경우, 집약성이강하다 (strong) 고이야기함 Page 29 기타저장장치 (1/2) 자기테이프 (magnetic tape) 카세트테이프를생각하면되며, 대표적인순차접근장치로서, 주로백업장치로서많이활용됨 QIC (Quarter-Inch Cartridge) - 가장오래된형태 - 용량 : 7 ~ 70 GB, 전송률 : 4 ~ 6 MBps DAT (Digital Audio Tape) 가장많이쓰이는유형 - ( 초기에 ) 음향기기용으로개발 - 폭 : 4 mm, 용량 : 4 ~ 40 GB, 전송률 : 4 ~ 6 Mbps DLT (Digital Linear Tape) - 고용량 : 10 ~ 80 GB, 고전송률 : 12 MBps Page 30 15
기타저장장치 (2/2) 광디스크 (optical disk) 레이저를사용하여금속성표면에정보를저장함 CD-ROM - 장점 : 가격이저렴하고, 대량생산이가능하며, 보존성이뛰어남 - 단점 : 디스크보다는느리며, 임의액세스가신속하지못함 CD-R: CD Recordable ( 한번기록한후에는 CD-ROM과동일함 ) CD-RW: CD Read/Write ( 여러번기록이가능함 ) DVD: Digital Video Disk - 양면사용, 밀도와저장방식개선 - CD(~700 MB) 의 7배이상의용량 : 4.7 ~ 17 GB Page 31 RAID (1/8) RAID (Redundant Arrays of Inexpensive Disks) RAID 개념의근원은 1988년 SIGMOD에발표된Patterson, Gibson, Katz의논문이다. 사용하는디스크개수가증가하면이로인한장애발생빈도가증가할수있는데, RAID는이러한문제를해결하여신뢰성을높인다. 또한, 작은용량의디스크여러개를묶어하나의논리적디스크를제공하여경제성을높이며, 입출력을분산시켜성능을향상시킨다. 중복을통한신뢰성개선 디스크장애율 (MTTF: Mean Time To Failure) - 단일디스크 = 100,000시간 (11.4년) - 100개의디스크어레이 ( 한개라도장애가날확률 ) = 100,000/100 = 1,000시간 (41.66일) 신뢰성문제해결을위하여디스크 ( 혹은데이타 ) 의중복을수행 - 일반적으로 Mirroring( 이중화, Shadowing) 을적용 - Mirroring된디스크어레이의 MTTF (10 6 ) 2 시간 57,000년 - 실제로는 ( 자연재해, 전원중단등으로인하여 ) Mirroring된두디스크에동시에장애가발생하는경우가종종있음 Page 32 16
RAID (2/8) 병렬성을통한성능의개선 Data Striping을통해서전송률을개선 ( 예 : 동일파일을여러디스크에분산저장 ) Bit-level Striping: 각 Byte의 Bit를여러디스크상에분할저장 - 8개의디스크로구성된어레이의경우 : i번째 Bit는 i번째디스크에저장 (i = 0~7) 최대 8배의액세스속도향상 - 4개의디스크로구성된어레이의경우 : i번째및 (i+4) 번째 Bit를 i번째디스크에저장 (i = 0~3) 최대 4배의액세스속도향상 Block-level Striping: 한파일의블록들이여러디스크상에분할저장 - n개의디스크어레이인경우 : 한파일의i번째블록이 (i%n) 번째디스크에저장 (i = 0~(n-1)) Logical Disk KANGWON! K W A O N N G! Physical Disks Page 33 RAID (3/8) RAID 의레벨 많은수의소형디스크를사용하여성능과신뢰성을높이고자하는목적 RAID는 0, 1, 2, 3, 4, 5의여섯레벨로크게나누어진다. 레벨은어떤척도의높고낮음을의미하기보다는각레벨이서로다른용도를위하여최적화된시스템이라볼수있다. 즉, 응용에따라서, 사용용도에따라서적당한레벨을선택해야하는것이다. RAID 0 ( 비중복스트라이핑 ) 장애대비를위하여여분의공간을가지지않는다. 데이타의빠른입출력을위하여데이타를여러디스크에분산하여저장하는 Striping 방법을사용한다. 신뢰성은떨어지나성능이매우뛰어나다. Page 34 17
RAID (4/8) RAID 1 ( 디스크미러링 ) 두개의디스크에동일한데이타를저장하는 Mirroring 기법을사용하는구조이다. 읽을때빠르나, 쓸때는약간느리다 ( 당연한결과!). ( 두디스크에동시에쓰거나, 하나에먼저쓰고다른하나를나중에쓰는방법사용 ) 신뢰성은높으나저장용량당단가가비싸다. RAID 2 ( 메모리스타일오류정정코드 ) Bit-level striping을수행하되오류정정을위하여여분의디스크를관리한다. 에러검출능력이없는디스크를위해 Hamming 오류정정코드를사용한다. 그러나, 실제로 SCSI 드라이브는에러검출능력을제공하므로, 이레벨은별로쓰이지않는다. Page 35 RAID (5/8) RAID 3 (bit-interleaved parity), RAID 4 (block-interleaved parity) Disk Array가 N+1 구조를가지며, N은데이타용으로 1은패리티용으로사용된다. 데이타는 N개의디스크에분산 (striping) 되어저장되고, 이들에대한패리티가한개의디스크에저장된다. 한개의디스크에오류가생기면나머지디스크들과패리티용디스크를사용하여데이타의복구가가능하다. 데이타를바이트단위로분산하여저장하는방법이 RAID 3이고, 블록단위로분산하여저장하는방법이 RAID 4이다. 읽을때는 RAID 0에해당하는빠른속도이나, 패리티갱신으로인하여쓸때는 RAID 0보다느리다. RAID 5 (block-interleaved distributed parity) 패리티정보를모든드라이브에분산하여저장한다. 이는패리티디스크가병목을일으키는현상을방지하기위해서다. 쓸때는RAID 3이나 4에비하여빠르나, 읽을때는느리다. Page 36 18
RAID (6/8) RAID 레벨에따른디스크형성의예제 (a) RAID 0 : 비중복스트리핑 C C C C (b) RAID 1 : 미러디스크 P P P (c) RAID 2 : 메모리스타일오류수정코드 P (d) RAID 3 : 비트-인터리브된패러티 P (e) RAID 4 : 블록인터리브된패러티 P P P P P (f) RAID 5 : 블록인터리브된분산패리티 Page 37 RAID (7/8) RAID 사용시장애대처및디스크교체 RAID 1~5는시스템운용중에디스크의교체가가능하다. 교체중간에 ( 혹은고장난디스크가있는동안에 ) 는 RAID 1의경우미러된디스크로, RAID 2~5의경우여러디스크의도움을받아서비스를진행할수있다. 또한, 교체를하면다른디스크들의도움으로원래의데이타를자동복구할수있다. 결국, RAID 1~5의경우하나의디스크장애에대해서는서비스중단이발생하지않는다고볼수있다. RAID 레벨의선택기준 RAID 0: 데이타손실이중요치않은고성능응용에서사용 RAID 1: 높은신뢰성및장애시빠른복구가필요한경우에사용 RAID 2, 4: 레벨 3, 5에포함됨 (RAID 2 RAID 3, RAID 4 RAID 5) RAID 3, 5: 고성능을요하는동시에, 적정수준의신뢰성도요구되는경우 Page 38 19
RAID (8/8) RAID 레벨의선택기준 ( 계속 ) 지금까지설명한바와같이 RAID는응용의목적에맞도록레벨을선택해야한다. RAID 1을사용하는경우, I/O 속도향상을위하여데이타를여러디스크에적절히분배하여저장하는 strategy가필요하다. 아니면, RAID 0+1(or RAID 10, 레이드일영 ), 즉 striping & mirroring을사용하여신뢰성과성능을높일수도있다. ( 통신분야에서많이사용하는방법 ) Page 39 강의 강의내용 파일의기본개념 (Ch. 1 in 화일구조 ) 파일저장장치 (Ch. 2 in 화일구조 ) 파일의입출력제어 (Ch. 3 in 화일구조 ) 순차파일 (Ch. 4 in 화일구조 ) Page 40 20
파일의입출력제어환경 (1/3) 사용자 ( 프로그램 ) 관점 : 논리적구조의파일을사용함 사용자입장에서파일은정형화된구조 ( 예 : 레코드의집합, 프로그램파일 ) 를가짐 사용자는실제로파일이디스크의어디에어떤형태로저장되어있는지확인하기어렵고확인할필요가없음 운영체제 (with 파일관리자 ) 과점 : 물리적구조의파일을사용함 파일이어떠한논리적구조를가지고있는지는중요치않음 주어진파일을실제로어떻게찾고 ( 디렉토리관리 ), 어떻게저장하고, 어떻게해석하는지에대한책임을가짐 Channel, Device Driver 등을통하여실제 I/O를수행하는주체이기도하며, 수행된 I/O 의결과로사용자에게논리적관점의파일구조를전달함 Page 41 파일의입출력제어환경 (2/3) 운영체제 : 다수사용자를위해컴퓨터자원을관리하는 S/W 사용자프로그램 논리적관점 운영체제 운영체제의기능 ( 예제 ) 물리적관점 Main Memory Manager 보조기억장치 Process Manager Scheduler File Manager 파일조직기법제공 ( 블로킹, 분산저장등 ) 사용자의 I/O 명령문 (read, write, ) 에대한I/O 처리 Device Manager: 물리적저장장치에대한접근기능제공 Page 42 21
파일의입출력제어환경 (3/3) File Manager 중심의운영체제구조 ( 예제 ) Code Stack Heap User Area O/S Area Buffer maintained in O/S Memory Manager (Buffer Manager) File Manager Device Driver (Hard Disk) Device Driver (Compact Disk) Device Driver (Fast Ethernet) Device Driver (something) Device (Hard Disk) Device (Compact Disk) Device (Fast Ethernet) Device (something) Page 43 UNIX 에서의입출력 (1/6) UNIX 에서는파일을단순히바이트의시퀀스 (sequence of bytes) 로가정 디스크자체, 디스크파일, 키보드, 콘솔장치등도파일로취급 (/dev/ ) 파일기술자 (file descriptor) 사용자에게파일을접근할수있도록하는식별자 (identifier) 로서, 정수로표현 파일세부정보 ( 경로, 권한, offset 등 ) 를저장한배열의인덱스역할수행 Special file descriptor 표준입력 ( 키보드 ) = 0 (= STDIN) fscanf(stdin, ); 표준출력 ( 출력화면 ) = 1 (= STDOUT) fprintf(stdout, ); 표준에러 = 2 (= STDERR) fprintf(stderr, ); 사용자가개방 (open) 한파일은 3 부터부여 프로세스와커널 프로세스 : 동시에실행가능한프로그램 ( 모든작업의기본단위 ) 커널 (kernel): 프로세스이하의모든계층을통합 (UNIX O/S 와동일한개념 ) ( 커널에서는 I/O 를일련의바이트상에서의연산으로본다.) Page 44 22
UNIX 에서의입출력 (2/6) 커널의 I/O 시스템이관리하는테이블 파일기술자테이블 (file descriptor table) 각프로세스가사용하는파일기록테이블 ( 매핑테이블에해당함 ) 개방파일테이블 (open file table) 현재시스템이사용중인개방된파일에대한엔트리저장 각엔트리는판독 / 기록허용여부, 사용프로세스수, 다음연산을위한파일오프셋등을저장 ( 파일오프셋의경우는파일기술자테이블에저장될수도있음 ) 인덱스노드 (index node), 파일할당테이블 (file allocation table) 파일의저장위치, 크기, 소유자등의정보를관리 디렉토리엔트리의개념으로이해할수있음 인덱스노드테이블 (index node table) Page 45 UNIX 에서의입출력 (3/6) 파일기술자테이블과개방파일테이블 파일기술자테이블 ( 프로그램당하나 ) 개방파일테이블 (UNIX 전체에하나 ) 화일기술자 개방화일테이블엔트리 R/W 모드 화일사용 다음접근 프로세스수 오프셋 Write 루틴포인터 Inode 테이블엔트리 0( 키보드 ) 1( 화면 ) 2( 에러 ) 3( 일반화일 ) 4( 일반화일 ) write 1 100 Page 46 23
UNIX 에서의입출력 (4/6) Inode (index node) 구조 inode 테이블의한엔트리 화일할당테이블 ( 계층구조를가질수있음 ) 소유자 ID 장치 그룹이름화일유형접근권한화일접근시간화일수정시간화일크기 ( 블록수 ) 블록카운트화일할당테이블 데이타블록번호 0 데이타블록번호 1 데이타블록번호 9 Page 47 UNIX 에서의입출력 (5/6) UNIX 에서의파일입출력절차 파일기술자값이 3 인파일에대한레코드판독 (read) 명령어를처리한다고가정하면, 1. 프로그램의파일기술자테이블에서개방파일테이블을이용하여, 개방파일테이블의해당엔트리를검색한다. 2. 개방파일테이블에서 Inode 테이블포인터를이용하여, Inode 테이블의해당엔트리를검색한다. 3. Inode 테이블에서해당파일의데이타가저장된디스크블록의주소를얻어디스크에서데이타블록을판독한다. Page 48 24
UNIX 에서의입출력 (6/6) 디렉토리와파일 디렉토리 : 파일을식별하는 Inode 번호와그에해당하는파일이름들을데이타로저장한파일 ( 디렉토리자체도파일로관리됨 ) Inode 에대한포인터는파일에대한모든정보를참조함 (UNIX 에서파일관리의기본은 Inode 구조로볼수있음 ) 파일이름과 Inode 여러파일이름이같은 Inode 를포인터로가리킬수있음 (hard link 구조 ) 이경우, 한파일이름이삭제되더라도포인터수만감소시킴 Page 49 강의 강의내용 파일의기본개념 (Ch. 1 in 화일구조 ) 파일저장장치 (Ch. 2 in 화일구조 ) 파일의입출력제어 (Ch. 3 in 화일구조 ) 순차파일 (Ch. 4 in 화일구조 ) Page 50 25
순차파일 (Sequential File) 정의 레코드들을저장하는가장기본적인방법으로서, 레코드들을 ( 지정된순서에따라 ) 연속적으로저장하는파일 레코드들을접근할때도저장할때의순서대로연속적으로접근해야함 종류 입력순차파일 (entry-sequenced file): - 레코드가입력되는순서대로저장함 ( 즉, 입력순서가레코드의저장순서를결정함 ) - Heap File( 차례로쌓는다는의미 ) 이라고도함 키순차파일 (key-sequenced file) - 레코드의특정필드값 ( 키값 ) 순서에따라저장 - 특정필드값에따라정렬 (sorting) 된상태를유지함 Page 51 스트림화일 (Stream File) 정의 연속적인판독 (read) 연산을통해레코드가파일에저장되어있는순서에따라데이타를액세스하는파일 데이타가하나의연속된바이트스트림으로구성 종류 순차접근스트림파일 (sequential access stream file) - 순차접근만을허용함 ( 예를들어, 테이프의경우순차접근만이허용됨 ) 임의접근스트림파일 (random access stream file) - 임의접근이허용됨 ( 예를들어, 디스크의경우임의접근도허용함 ) 접근모드 (access mode) 파일에서수행하려는연산에따라판독 (read), 기록 (write), 갱신 (read/write), 첨가 (append) 등을파일개방 (open) 시에명시하여야함 Page 52 26
순차접근스트림파일 (1/5) 판독 (read) 연산 기본스트림화일을판독 (read) 모드로열면판독포인터는파일의첫번째바이트를가리킨다. 해당위치에서시작하여해당바이트값을전송하고, 판독포인터를스트림화일의다음바이트시작위치로변경한다. n번째바이트값을판독하기위해서는반드시 (n-1) 번째바이트값을판독해야한다. 기록 (write) 연산 파일을기록 (write) 모드로열면기록포인터는화일의첫번째바이트가기록될위치를가리킨다. 해당위치에서시작하여해당바이트값을기록하고, 기록포인터를다음바이트가기록될위치로변경한다. n번째바이트값을기록하기위해서는반드시 (n-1) 번기록연산을수행해야한다. Page 53 순차접근스트림파일 (2/5) C 언어를이용한스트림파일의생성 streamfile = fopen( stream.txt, w ); 이름이 stream.txt 인공백스트림파일이생성되어기록 (write) 모드로개방된다. 아래그림에서화살표는개방된상태에서의인덱스값을갖는포인터를나타낸다. streamfile??????? index : 0 1 2 3 4 5 6 Page 54 27
순차접근스트림파일 (3/5) C 언어를이용한스트림파일의생성 ( 계속 ) fputc(ch, streamfile); 스트림파일에한글자 (character) 를기록한다. fputc() 를연속적으로사용하여 S, M, I, T, H 값을파일에기록한다. 아래그림은상기와같이다섯글자를기록한이후의포인터의위치를나타낸다. streamfile S M I T H?? index : 0 1 2 3 4 5 6 Page 55 순차접근스트림파일 (4/5) C 언어를이용한스트림파일의생성 ( 계속 ) fclose(streamfile); 앞서개방한스트림파일 streamfile을닫는다. 로표현된end-of-file 표시가스트림파일끝에첨가된다. 지금까지생성하고기록한스트림파일은 stream.txt 라는파일이름으로저장된다. streamfile S M I T H index : 0 1 2 3 4 5 Page 56 28
순차접근스트림파일 (5/5) 순차접근스트림파일 연속적으로파일을접근하고, 파일에있는모든바이트를처리하는경우에유용 화일을순차적으로접근하는과정은배열을순차적으로접근하는것과유사 특정바이트혹은바이트스트링만을찾기위한방법으로는좋지않음 임의접근스트림파일 이원탐색법 (binary search): 배열의인덱스를이용하여배열의원소를직접 ( 임의로 ) 액세스 이원탐색법을파일에적용 반드시파일에있는바이트를임의로액세스할수있어야함 순차접근스트림파일을불가하며, 임의접근스트림화일은가능함 Page 57 임의접근스트림파일 (1/3) 오프셋 (offset) 값을이용 순차적으로바이트를액세스하는것이아니라, 오프셋이가리키는위치에대한임의접근을수행 임의접근을위한함수 fseek() 함수 파일스트림에서판독또는기록포인터의위치를변경하는데사용 파일의시작, 끝, 현재의위치로부터오프셋크기만큼판독또는기록포인터를이동시킴 ftell() 함수 파일스트림에서판독또는기록포인터의인덱스값을반환하는데사용 즉, 파일에서포인터가가리키는현재위치 ( 오프셋 ) 를리턴함 Page 58 29
임의접근스트림파일 (2/3) 판독모드 ( r ) 로개방한스트림파일 streamfile = fopen( stream.txt, r ); 파일 stream.txt 를판독모드로개방함 아래그림과같이, 파일이열리면판독포인터는파일의첫번째바이트를가리키도록설정됨 streamfile S M I T H index : 0 1 2 3 4 5 offset = ftell(streamfile); 현재의포인터값을반환해주는함수 위예의경우, 현재판독포인터는인덱스값이 0이므로, 0이반환됨 Page 59 임의접근스트림파일 (3/3) 판독모드 ( r ) 로개방한스트림파일 ( 계속 ) fseek(streamfile, 2, SEEK_SET); 시작위치 (SEEK_SET) 로부터판독포인터를 2바이트이동시킴 SEEK_SET: 시작위치, SEEK_END: 끝위치, SEEK_CUR: 현재위치 위함수의수행에따라판독포인터의위치는다음과같이변경됨 streamfile S M I T H index : 0 1 2 3 4 5 offset = ftell(streamfile); 위예의경우, 현재판독포인터는인덱스값이 2이므로, 2가반환됨 Page 60 30
순차파일의유형 (1/4) 입력순차파일 (entry-sequenced file) 레코드가순서대로쌓여있다는의미에서 heap file이라고도함 레코드에대한분석, 분류, 표준화과정을거치지않음 필드의순서, 길이등에대해서도제한없음 레코드의길이, 타입도일정하지않을수있음 레코드는여러개의 < 필드, 값 > 쌍으로구성 SNUMBER = 1234 #SNAME = 홍길동 #SEX = 남 #IQ = 130; SNUMBER=1234 #WEIGHT=60; CITY = 춘천 #POPULATION = 25만 ; SNAME = 김철수 #HEIGHT = 170 #AGE = 30; DEPARTMENT = 컴퓨터과학과 #NUMBER_OF_PROFESSOR = 10; Page 61 순차파일의유형 (2/4) 입력순차파일의갱신작업 새로운레코드삽입, 기존레코드삭제, 기존레코드변경등 레코드삽입 : 기존파일끝에레코드를첨가 (append) 레코드삭제및변경 - 새로운순차파일을생성하면서동시에수행 - 작업대상레코드를검색하면서기존의레코드를새로운파일로출력 해당레코드검색시삭제혹은변경작업수행 ( 변경시, 변경결과를새로운파일로출력 ) 나머지남은레코드들을다시새로운파일로모두출력 입력순차파일의검색작업 주어진필드값 ( 예 : 학번 = 20051234) 에대응하는레코드를찾기위하여, 첫번째레코드부터차례로검색하면서원하는필드값을순차적으로검색 ( 비교 ) 키필드 (key field): 검색을수행하는데있어서, 레코드에서비교대상 ( 검색대상 ) 이되는필드 ( 예 : 학생테이블에서학번필드 ) 탐색키필드 (search key field): 검색을수행하는데있어서비교대상 ( 검색대상 ) 으로주어진필드 ( 예 : 찾고자하는학생의학번인 20051234) Page 62 31
순차파일의유형 (3/4) 키순차파일 (key-sequenced file) 저장장치의레코드순서와파일에저장된레코드들의논리적순서가같은구조의파일 파일내의레코드들이키필드값에따라정렬됨 데이타필드, 즉, 애트리뷰트이름은개별레코드가아닌파일설명자에한번만저장하면됨 ( 앞서예를든순차파일의경우매번필드이름을저장하고있음 ) 학번 이름 나이 본적 성 1243 홍길동 10 강원 남 1257 김철수 20 경기 남 1332 박영희 19 충청 여 1334 이기수 21 전라 남 1367 정미영 20 서울 여 1440 최미숙 21 강원 여 키필드 : 레코드의순서를결정하는필드임 Page 63 순차파일의유형 (4/4) 키순차파일 ( 계속 ) 키순차파일은정렬된화일 (sorted file) 이라고도함 ( 레코드들이특정키필드값에따라정렬된파일을 정렬된파일 이라함 ) 정렬키 (sort key): 정렬순서결정에사용된값의필드 오름차순 (ascending) / 내림차순 (descending) 정렬 키순차파일의특징 일괄처리 (batch processing) 에서많이사용 순서상다음위치에해당하는레코드를신속하게접근할수있음 하나의순차파일이두개의상이한정렬순서를만족시킬수없음 ( 예 : 학번과나이를모두키필드로사용할수없음, 나이순으로학번이부여된다면?) 여러정렬순서파일이필요한경우에는임시파일을생성했다가용도가끝나면파일을삭제함 Page 64 32
순차파일의설계시고려사항 레코드내의필드배치는어떻게할것인가? 활동파일 (active file) 과비활동파일 (inactive file) 을구분하여저장 활동파일에대한크기를감소시켜액세스가빠르게함 레코드내의필드및크기를고려하여고정길이혹은가변길이를선택함 레코드구조및크기가유사하면고정길이를, 그렇지않으면가변길이를사용 키필드는어느것으로할것인가? 응용의종류및특성에따라선정 ( 예 : 전화번호부 가입자이름 ) 키필드의선정은레코드액세스순서를나타내므로성능에큰영향을미침 적정블로킹인수는얼마로하여야하는가? 순차파일에서는일반적으로가능한블록을크게하는것이바람직하며, 블로킹인수또한큰값을사용하는것이유리함 ( 가능한단번에많은데이타를송수신하는것이유리하며, 레코드중간에레코드의추가가어려우므로블로킹인수도큰값이유리함 ) 블록크기는버퍼크기나운영체제가지원하는블록크기에의해제한될수있음 Page 65 33