27.08.2015 Views

리눅스 시스템 프로그래밍-미리보기

커널과 C 라이브러리로 풀어가는(개정2판) 로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월 35,000원

커널과 C 라이브러리로 풀어가는(개정2판)
로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월
35,000원

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

완전히 투명하다. 실제로, 두 번 이상 링크된 파일을 찾아내는 작업이 더 어렵다. 반면에 심벌<br />

릭 링크를 조작하려면 특수한 <strong>시스템</strong> 콜이 필요하다. 이런 투명성 결여는 심벌릭 링크가 명료<br />

하게 생성되며 파일<strong>시스템</strong> 내부 링크가 아닌 일종의 바로가기처럼 동작하기 때문에 종종 장점<br />

으로 작용하기도 한다.<br />

특수 파일<br />

특수 파일은 파일로 표현되는 커널 객체다. 지난 수년 동안 유닉스 <strong>시스템</strong>이 지원하는 특수 파<br />

일은 다양해졌다. 그중 <strong>리눅스</strong>는 네 종류의 특수 파일을 지원하는데 블록 디바이스 파일, 캐릭<br />

터 디바이스 파일, 네임드 파이프, 유닉스 도메인 소켓이 그 4가지다. 특수 파일은 ‘모든 것이<br />

파일’이라는 유닉스 철학에 맞게 파일<strong>시스템</strong> 위에 구현된 추상화 개념이며 <strong>리눅스</strong>는 특수 파일<br />

을 생성하는 <strong>시스템</strong> 콜을 제공한다.<br />

유닉스 <strong>시스템</strong>에서는 하드웨어 장치에 대한 접근 또한, 파일을 거쳐 실행된다. 이런 파일이 파<br />

일<strong>시스템</strong>에 있는 디바이스 파일인데 일반 파일처럼 생기고 실제 일반 파일처럼 동작한다. 디바<br />

이스 파일을 열고, 읽고, 쓰는 방식으로 사용자 영역에서 하드웨어 장치로 접근을 허용하여 시<br />

스템에 있는 (물리적이거나 가상의) 하드웨어 장치를 조작한다. 유닉스에서 하드웨어 장치는<br />

보통 캐릭터 디바이스와 블록 디바이스로 나뉘고 하드웨어 종류마다 독자적인 특수 디바이스<br />

파일이 존재한다.<br />

캐릭터 디바이스는 바이트로 구성된 선형 큐처럼 접근할 수 있다. 디바이스 드라이버는 큐에<br />

바이트를 하나씩 집어 넣고, 사용자 영역에서는 큐에 쌓인 순서대로 바이트를 읽어낸다. 키<br />

보드는 캐릭터 디바이스의 대표적인 예로, 사용자가 ‘peg’라고 입력하면 애플리케이션은 키<br />

보드 디바이스에서 p, e, g를 순서대로 읽어낸다. 읽을 문자가 남아 있지 않으면 디바이스는<br />

EOF End Of File 를 반환한다. 글자가 빠지거나 순서가 바뀐 상태로 읽으면 키보드를 사용할 수 없<br />

을 것이다. 캐릭터 디바이스는 캐릭터 디바이스 파일로 접근한다.<br />

반면에 블록 디바이스는 바이트 배열로 접근한다. 디바이스 드라이버는 위치 지정이 가능한 장<br />

치에 여러 바이트를 맵핑해 사용자 영역에서는 이 배열이 포함하고 있는 유효한 바이트에 임의<br />

로 접근할 수 있다. 예를 들어 12바이트를 읽은 다음에 7바이트를 읽고 다시 12 바이트를 읽<br />

어도 된다. 블록 디바이스는 보통 저장장치를 말하는데 하드 디스크, 플로피 드라이브, CD-<br />

ROM 드라이브, 플래시 메모리는 모두 블록 디바이스에 해당한다. 블록 디바이스 역시 블록<br />

1장 핵심 개념 소개<br />

47

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!