Unix(유닉스) Shell(쉘) 프로그램 구현 레포트
- 최초 등록일
- 2009.06.12
- 최종 저작일
- 2009.04
- 18페이지/ 한컴오피스
- 가격 2,000원
소개글
1. 문제
유닉스에서 작동하는 자신만의 쉘(shell)프로그램을 구현 한다.
2. 문제 설명
유닉스에서 쉘(shell)은 커널과 사용자의 중간에 위치하여 사용자가 OS에 명령을 내릴 수 있게 텍스트 기반의 인터페이스를 제공해 주는 프로그램이다. 또한 사용자로부터의 명령을 입력받고 해당 명령 행을 분석하여 해당 프로그램을 메모리에 적재, 프로세스를 실행하게 한다. 여기서는 이런 기본적인 쉘의 기능을 구현하고 더 나아가 쉘과 프로세스간의 병행 처리 및 실행되는 프로세스의 입출력 방향을 변경할 수 있는 기능을 만들고, 실행되는 두 프로세스간에 자료를 전달할 수 있는 기능을 유닉스의 파이프(PIPE)를 이용하여 구현해 보도록 한다.
목차
1. 문제
2. 문제 설명
3. 해결 방법
4. 구현
5. 결과
6. 결과 분석
7. 결론
8. 부록(소스)
본문내용
1. 문제
유닉스에서 작동하는 자신만의 쉘(shell)프로그램을 구현 한다.
2. 문제 설명
유닉스에서 쉘(shell)은 커널과 사용자의 중간에 위치하여 사용자가 OS에 명령을 내릴 수 있게 텍스트 기반의 인터페이스를 제공해 주는 프로그램이다. 또한 사용자로부터의 명령을 입력받고 해당 명령 행을 분석하여 해당 프로그램을 메모리에 적재, 프로세스를 실행하게 한다. 여기서는 이런 기본적인 쉘의 기능을 구현하고 더 나아가 쉘과 프로세스간의 병행 처리 및 실행되는 프로세스의 입출력 방향을 변경할 수 있는 기능을 만들고, 실행되는 두 프로세스간에 자료를 전달할 수 있는 기능을 유닉스의 파이프(PIPE)를 이용하여 구현해 보도록 한다.
3. 해결 방법
명령에 대한 정보를 담을 수 있는 구조체를 정의하고, 사용자로부터 커맨드라인 한 줄을 입력 받는다.
입력받은 커맨드라인을 분석하여 비교한뒤 다음과 같은 순서로 프로그램을 진행한다.
쉘은 응용프로그램을 실행시키는 기능 외에도 직접 구현되어있는 명령이 있어야 한다. 예를 들어 입력받은 명령이 디렉토리를 변경하는 `CD`와 같은 명령일 경우 파일을 검색하지 않고, 쉘 내부에서 이 작업을 수행한다.
쉘 내부에서 진행하는 명령이 아니라면 PATH변수를 검색하여 해당명령에 대한 실행가능한 파일이 있는 위치를 찾는다. 파일을 찾았다면 execvp()매소드를 이용하여 프로그램을 실행하는데 이때 쉘은 실행되는 프로세스의 올바르지 못한 종료 등의 오류에서부터 쉘 자신의 프로세스를 보호하기 위하여 프로세서를 실행하기 전에 fork()등으로 자식 프로세스를 만들고 이 자식 프로세스 내에서 프로그램을 실행한다.
쉘의 이런 기능 외에도 명령 뒤에 혹은 두개의 명령 사이에 사용되는 ‘&’,‘<’,‘>’,‘|’문자를 사용할 수도 있는데 실행프로세서를 기다리지 않는 명령인 ‘&’는 wait()매소드를 호출하지 않는 방법을 통해 구현하고 프로세서의 입출력방향을 파일로 전환하는 기능인 ‘>’, ‘<’는 close()와 dup()매소드를 이용하여 구현한다. 그리고 두 프로세스를 동시에 실행하여 하나의 프로세스의 출력이 다른 프로세스의 입력이 되게 하는 ‘|’명령은 유닉스의 파이프(PIPE)를 이용하여 구현하도록 한다.
참고 자료
운영체제론 3e
운영체제론 2판 번역본