본문 바로가기

Academy I/Tech Academy

Unix System Programming 1

Unix System Programming 1  - :namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />김성호(moohou) :namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

_________________________________________________________________________

 

UNIX 시스템 프로그래밍

 

1장 기본개념과 용어

 

1.1 화일

UNIX 시스템에  대한 정보는 화일에 저장된다.  UNIX 화일은 복잡하고 특수한 구조(인덱스 화일구조  )를 개발할 수 있도록 설계된 명확하고 일반적인 개념이다. 한줄의 끝을 알려주는 개행문자는, UNIX에 관한 한 단지 시스템 유틸리티(utility)와 사용자프로그램에 의해 읽히고 쓰여지는 하나의 문자에  불과하다.

 

1.1.1 디렉토리와 경로이름

디렉토리는 화일의 집합으로, 화일시스템의 논리적인 구성을 가능하게 한다. UNIX 화일의 저장은 각 중간 노드(non-terminal node) 각 디렉토리에 해당되는 계층적인 트리구조로서 생각될 수 있다. 이 트리의  맨꼭대기는 루트 디렉토리(root directory)  불리는 한개의  디렉토리이다.


'/'문자로  시작하지 않는 경로이름은 상대적인 (relative)  경로이름이라고 부르고, 현재 사용자가  작업

하고 있는 디렉토리(current working directory)에 대하여 상대적인 경로를 알려준다. 경로이름의 각 요소(component)는 최대 14문자까지만  허용된다는 것을 명심해야 한다.

 

1.1.2. 소유권과 허가

소유권(ownership)은 허가(permission)와 같은 화일의 속성을 바꿀수 있는 권리를 부여한다.

 

1.1.3. 화일개념과 일반화

UNIX는 화일 개념을 디스크 화일 뿐만 아니라 주변장치와 프로세스간 통신채(interprocess communication channel)까지 확장한다.

 

1.2. 프로세스

UNIX용어로서 프로세스는 단지 수행중인 프로그램을 말한다.  프로세스를 생성하는 가장 쉬운 방법은 UNIX 명령어 처리기 또는 쉘(shell)에 명령을 하는 것이다.

 

1.2.1. 프로세스간 통신

UNIX는 다양한 프로세스간 통신 방법들을 사용하여 프로세스들이 서로 협력하도록 한다. 다른 UNIX 프로세스간 통신기능으로서 signal  있다. 이것은 인터럽트(interrupt)를 기초로 하는  통신모델을 제공한다. 또 다른 기능으로는 공유메모리(shared memory)와 세마포어(semaphore)가 있다.

 

1.3. 시스템호출과 라이브러리 서브루틴

시스템호출은 소프트웨어 개발자가  UNIX 커널(kernel)로 들어가기 위한 수단이다. 커널은 소프트웨어의  한 부분으로서 항상 메모리에 존재하여 UNIX 시스템의 프로세스 스케줄링(process  scheduling) I/O 제어를 다룬다. 

 

본질적으로 커널은  UNIX에서 진정한 운영체제로서 간주되는 부분이다. 커널에 의해서 모든 사용자 프로세스와  모든 화일 시스템 접근들은 감독되고 제어된다. 시스템 호출에 의해 수행되는 코드의 대부분은 호출 프로그램이 아니라 실제 커널 그 자체인 점이다.

 

다른 말로 호출 프로그램은 커널에 의해 제공되는 기능을 직접 이용한다. 사용자 프로세스와 커널 사이의 전환(switch)은 보통 소프트웨어 인터럽트 절차를 통하여 이루어진다. 프로세스의 경우 시스템호출 명령은 새로운 프로세스를 생성하고, 존재하는 프로세스를 종료하고, 프로세스 상태에 대해 정보를 얻고, 두 프로세스 사이에 통신 채널을 설치하는 것을 포함한다.

 

UNIX 시스템은 시스템 호출뿐만 아니라 라이브러리와 표준 서브루틴을 제공한. 이에 대한 가장  중요한 예는 표준 I/O 라이브러리이다. 이것은  화일 접근 프리미티브로 구성된 시스템호출에 의해서는 제공되지 않는 형식화된 변환(formatted conversion)과 자동 버퍼링(automatic buffering)등과 같은 기능을 제공한다.

 

또한 이러한 기능들을 효율적으로 수행하도록 한다. 그러나 표준 I/O 서브루틴들은 궁극적으로 시스템호출 인터페이스를 사용한다.  이것들은 분리된 부시스템(subsystem)이 아니라 시스템호출 프리미티브에 기초한 화일접근 기능의 다른 면처럼 보인다. 여기서 주안접은 환경(environment) 접촉하는 어떤 프로세스도 시스템호출을 사용해야 한다는 것이다.