파일에 대해서
운영체제의 중요한 기능들 중 하나가 디스크와 각종 장치들의 세세한 사항들을 숨기고 프로그래머들에게 장치와 무관한 깨끗한 파일이라는 추상적인 모델을 제시하는 것이다. 파일을 생성하고 지우고 조작하기 위해서는 시스템 호출이 꼭 필요하다. 파일이 읽히기 전에 이를 디스크에서 찾고 열수 있어야만 하고 읽기를 다 한 후에는 이를 닫기도 해야 하며 이런 일들을 할 수 있는 호출이 제공되어야만 한다.
파일을 둘 수 있는 곳이 필요한데 대부분의 운영체제는 파일들을 그룹화하는 방법의 하나로 디렉터리라는 개념을 지원한다. 어떤 학생은 자기가 수강하는 각 과목을 위한 디렉터리를 하나 두고, 또 World Wide Web 홈페이지를 위한 디렉터리를 하나 둘 수 있다.
프로세스와 파일의 계층구조는 둘 다 트리 형태로 이루어졌지만 차이점이 분명히 있다. 프로세스 계층 구조는 깊지 않으나 파일의 계층 구조는 상당히 깊은 계층을 이루고 있다. 프로세스 계층구조는 1분 이상 유지되는 경우가 많지 않으나 디렉터리 계층구조는 수년 동안 이어지기도 한다. 일반적으로 부모 프로세스만이 자식 프로세스를 제어하거나 접근할 수 있는 반면 파일, 디렉터리에 대한 읽기는 거의 모든 경우에 보다 넓은 범주의 사람들이 접근할 수 있도록 구성되어 있다.
디렉터리 계층에 속한 모든 파일은 계층의 상위에 있는 '루트 디렉터리'로부터 시작하는 '경로 이름'을 사용해 접근할 수 있다. 이런 절대적인 경로 이름은 루트 디렉터리에서부터 각 파일에 이르기 위해 거쳐야 하는 디렉터리 목록으로 구성되어 있고 이 목록은 디렉터리 사이에 슬래시로 각 디렉터리를 구분한다.
프로세스는 항상 현재의 작업 디렉터리를 갖는데 이를 기준으로 하면 슬래시로 시작하지 않는 경로 이름을 사용할 수 있게 된다. 프로세스들은 시스템 호출을 통해 새로운 작업 디렉터리를 지정할 수가 있다. 파일을 읽고 쓰기 전에 파일을 먼저 열어야 하는데 파일에 대한 권한을 확인하게 된다. 접근 권한이 있으면 시스템은 추후 작업 때 사용할 파일 디스크립터라고 하는 정수를 반환해 준다.
UNIX에서 다른 중요한 개념은 마운트 된 파일 시스템이다. 거의 모든 경우에 USB 메모리 스틱을 꽂을 수 있는 USB 포트가 있고 다른 컴퓨터에는 플로피 디스크 혹은 외장형 디스크가 있다. 이런 탈착 장치를 편리하게 다루기 위해 UNIX는 CD-ROM이나 DVD 등에 있는 파일 시스템을 메인 트리에 연결할 수 있게 한다. mount 호출 전에는 하드 디스크에 있는 루트 파일 시스템과 CD-ROM에 있는 두 번째 파일 시스템은 서로 관련 없이 독립되어 있다고 볼 수 있다.
그러므로 CD-ROM에 있는 내용에 대한 경로 이름을 지정할 수 있는 방법이 없으므로 여기에 있는 파일 시스템은 사용 불가능하다. UNIX는 경로 이름 앞에 드라이브 이름 혹은 번호를 접두사로 둘 수 없다고 되어 있다. 이러한 장치와 연계성을 없애는 것이 운영체제의 역할 중 하나이다.
특수 파일은 I/O 장치가 파일처럼 보이도록 한다. 이렇게 되면 파일을 읽고 쓰는데 사용되는 시스템 호출을 그대로 이용해서 이 장치들을 읽고 쓸 수가 있다. 특수 파일은 블록 특수 파일과 문자 특수 파일이라는 두 종류가 있다. 블록 특수 파일은 디스크 등과 같이 임의로 접근할 수 있는 블록들로 구성된 장치를 모델링 하기 위해서 사용된다.
블록 특수 파일을 열고 이 파일의 블록 4를 읽는 프로그램이 있다면 파일 시스템의 구조와 상관없이 이 프로그램은 해당 장치의 네 번째 블록을 바로 읽어 들일 수가 있다. 이와 동일하게, 문자 특수 파일은 프린터, 모뎀과 같이 문자열을 받아들이거나 출력하는 장치들을 모델링 하기 위해서 사용된다.
파이프는 프로세스와 파일 양쪽 모두에 관련된다. 파이프는 두 개의 프로세스를 연결해 주기 위해 사용되는 의사 파일로 보면 된다. 만약 프로세스 A, B가 파이프를 통해 대화하고 싶다면 우선 설정이 필요하다. 프로세스 A가 B에게 데이터를 보내고 싶다고 하면 프로세스 A는 출력 파일에 내용을 쓰듯이 파이프에 쓰기만 하면 된다. UNIX에서 프로세스 간의 통신은 보통 파일을 읽고 쓰는 것과 매우 흡사하다고 보면 된다.
'컴퓨터&네트워크' 카테고리의 다른 글
통신 장비 (0) | 2024.08.14 |
---|---|
메모리와 입출력 (0) | 2024.08.14 |
컴퓨터의 내부 구조와 조직 (0) | 2024.08.13 |
통신 프로토콜 (0) | 2024.08.13 |
클라이언트-서버 시스템 (0) | 2024.08.12 |