티스토리 뷰

Study/OS

[OS] Mint64OS 26절 Standard IO Function

생각많은 소심남 2013. 2. 5. 11:14

지난 포스트에서 다룬 내용은 그냥 빈 파일을 생성하고 그 파일이 제대로 hdd에 저장되는지를 확인해보았다. 하지만 저번에 잠깐 이야기 했다시피 프로그램이란 코드의 집합체이며, 그 말은 이전과 같이 빈 파일안에 코드라고 정의되어야 할 무언가가 들어있어야 한다는 것이다. 결국은 파일에 어떤 내용을 집어넣을 수 있어야 하고 그를 위해서 파일에 접근할 수 있는 입출력함수가 필요하다.

 C에서는 따로 stdio.h에서 파일의 입출력과 관련한 fopen()이나 fwrite(), fclose()같은 함수를 제공한다. 책에서도 이를 구현했다.

 아무튼 이걸 구현하기 위해서는 따로 FILE과 DIRECTORY에 대한 자료구조가 필요하다. 당연히 파일입출력이기 때문에 검색에 대한 기능이 필요하며, 이를 위해서는 지난 포스트에서 언급했던 클러스터간 이동의 개념이 필요하다. 물론 클러스터간 이동을 위해서는 클러스터의 시작 주소와 이전 주소, 현재 주소에 대한 값, 현재 파일에 대한 크기값을 가지고 있어야 원활하게 이동할 수 있다.

 참고로 파일의 입출력시 외부 인터럽트가 개입하면 내용이 변형될 수 있기 때문에 이 입출력과 관련한 부분은 Critical Section으로 묶어둬서 외부 영향을 받지 않게 한다.



초기에는 아무런 데이터가 없다, 100MB의 용량이 인식되고 있다.



여기서 파일을 생성하게 되면 각각이 cluster에 파일에 관한 정보가 들어간다. 그래서 사용할 수 있는 클러스터의 수가 변화하는 것을 볼 수 있다.



파일에다가 입력을 한 후에 용량을 측정하면 위와 같이 나온다,



c의 fread와 동일한 형태의 함수인 readfile 이다. 역시 파일에 들어있는 내용물을 확인할 수 있다.


단순히 파일이 들어간 것이 끝이 아니다. 이 파일이 클러스터 사이즈에 맞게 들어갔는지, 어느 영역에 작성되도 제대로 인식되는 확인하는 과정이 책에 포함되어 있다. 참고로 bochs에서는 hdd의 입출력이 있을 경우에는 밑의 상태창에 색으로 표현한다. 그래서 워와 같이 hdd에 붉은 색으로 들어와 있는 건 지금 hdd에 Load가 걸려있다는 것이다.

댓글