1 / 28

System Programming

System Programming. Project #1 Concepts. Assignment #1. 간단한 쉘을 구현하라 프롬프트를 나타내고 명령어를 받아들여 프로그램을 실행시키고 프로그램의 실행이 끝나면 다시 프롬프드가 명령어를 받아들이기를 반복하는 간단한 쉘 프로그램을 작성하라 . (Hint, fork, exec, wait 등의 system call 을 활용 )

ginata
Download Presentation

System Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. System Programming Project #1 Concepts

  2. Assignment #1 • 간단한 쉘을 구현하라 • 프롬프트를 나타내고 명령어를 받아들여 프로그램을 실행시키고 프로그램의 실행이 끝나면 다시 프롬프드가 명령어를 받아들이기를 반복하는 간단한 쉘 프로그램을 작성하라. (Hint, fork, exec, wait 등의 system call을 활용) • 쉘이 redirection (< , >) 기능을 제공하도록 하라. (Ex, a.out > a.result 라는 명령어는 a.out의 수행결과를 a.result라는 파일에 기록한다.) • 쉘이 pipe (|)의 기능을 제공하도록 작성한다. 이때 Unix의 FIFO 와 pipe를 사용하는 2가지 버전을 모두 구현하라. • 주의 : 쉘커맨드를 직접 사용하는 명령어를 사용하지 말 것! • Key concept • Fork • stdin/stdout • Redirection • Pipe

  3. 1-0. Program vs. Process • Program • 일련의 Instruction 집합 • Process • 메모리에 올라와 있는 program instance • OS 커널에서 스케줄링, 리소스의 관리의 단위 • 하나의 프로그램이 여러 개의 프로세스를 만들 수 있음 • 프로세스들끼리는 부모 자식 관계를 가짐

  4. 프로그램을 만들 때, • 한 프로그램에서 같은 작업을 동시에 수행시키고 싶을 때? • 예) 하나의 서버가 여러 명의 client를 처리할 때 • 한 프로그램에서 서로 다른 작업을 하고 싶을 때? • 예) 메뉴 기능을 수행하면서, 윈도우 화면에 애니메이션을 수행시키고 싶을 때

  5. 1-1. fork() fork() Process Process *. 자기 자신을 복제 *. 메모리 영역은 독립 *. PID 는 다름 *. 완전히 복제된 두 개의 Process 가 돌게 된다. Process’

  6. pid = fork(); If(pid!=0) { /* section A */ } else { /* section B */ } • *. Parent Process • fork() 의 return value • 는 Child 의 process id pid = fork(); If(pid!=0) { /* section A */ } else { /* section B */ } pid = fork(); If(pid!=0) { /* section A */ } else { /* section B */ } *. Child Process -fork() 의 return value 는 0 -process id 가 0 이라는 뜻은 아님

  7. 1-2. exec() Process Fork() *. 완전히 새로운 Process ! *. 메모리 영역에 덮어 씌워짐 Process Exec() Process’ Process X

  8. 2-1. Stdin, Stdout (device) 눈에 보이는 도구들 컴퓨터*가 입출력 할 때 키보드 모니터 파일 다 똑같게 취급! *정확히는 OS 에서 이렇게 지원해 줌

  9. 2-2. Stdin, Stdout • stdin : Standard input • 보통의 경우, 키보드 • stdout : Standard output • 보통의 경우, 화면 • 따로 명시하지 않으면 기본적으로 입력과 출력은 Standard 를 따른다. • 파일처럼 읽고 쓸 수 있다 • File open->read or write->close

  10. 3. Shell? • The interface with the UNIX • 예) bash, csh, tcsh … • c.f.) GUI (Graphic User Interface) • stdin을 입력 받아 해석하고 수행시켜서 stdout으로 출력시켜줌 • 사용자가 수행시키는 프로세스의 부모 프로세스가 됨

  11. 4. Redirection • 출력과 입력을 수행할 대상을 바꾸어준다. • 표준 출력 장치인 모니터로 출력되는 결과를 파일에 출력한다거나 할 때 사용된다. • > : 왼쪽 명령의 수행문의 출력의 방향을 오른쪽에 명시되는 파일로 바꾼다. • < : 왼쪽 명령의 수행문의 입력을 오른쪽에 명시된 파일에서부터 받는다. • >> : >와 비슷하나 overwrite가 아닌 append를 수행한다. • Ex) 새로 파일을 만들지 않고 그 파일의 뒤에 내용을 덧붙인다.

  12. example

  13. 5-1. Pipeline • 출력과 입력을 평소와 다르게 하는 것은 redirection과 비슷하나 장치를 바꾸는 것이 아니라 왼쪽의 결과를 오른쪽의 입력 Data로 한다는 것이 다르다. • Redirection을 사용할 경우 중간 과정으로서 파일 등을 생성해야 하는데 그렇지 않고 바로 원하는 결과를 얻을 수 있다는 것이다. • 파일이냐 프로그램이냐?

  14. 5-2 UNIX FIFO pipe • mkfifo • Create named pipes

  15. 5-3. Filter • 입력된 Data를 고유한 방법으로 조작하고 결과를 출력하는 프로그램 • wc(word count) : 입력의 줄, 단어, 문자를 센다. • sort : 입력을 정렬한다. • Filter들을 Pipeline과 Redirection으로 연결하여 다양한 조작을 할 수 있다.

  16. example

  17. example

  18. example

  19. 추가내용 아담접속법과 컴파일 방법

  20. 1-1. Adam server • 전산과 실습용 서버 • Sun OS 5.9 • 개인 PC에 Linux 설치하거나VMWare를 깔아서 XP위에서 설치하는 방법도 있다. • 계정 발급은 과 사무실에 문의하시길 =)

  21. 1-2. Adam 접속하기

  22. 2. compile • gcc filename.c • 실행파일 이름이 a.out으로 자동 지정됨 • gcc filename.c –o filename2 • 실행파일 이름이 filename2로 지정됨

  23. 3. 압축하는 방법 • 압축하기 : tar cvzf filename.tar.gz directory • 압축풀기 : tar xvzf filename.tar.gz

  24. 4-1. Makefile • 프로그램이 main.c, read.c, write.c로 구성되어 있고 모두 io.h라는 헤더파일을 사용한다. 실행파일의 이름은 test. • 이들을 각각 컴파일 하려면 • gcc –c main.c • gcc –c read.c • gcc –c write.c • gcc main.o read.o write.c –o test • 귀찮다!! -> Makefile 사용!!

  25. 4-2. Makefile – cont. • 파일이름은 Makefile • 컴파일 실행명령은 make • 현재 directory에서 makefile을 읽어서 컴파일 시킴 • 구조 • target : dependency command • command부분은 꼭 Tab으로 시작해야 함 • 만들어진 목적파일을 모두 삭제하는 명령어는 make clean

  26. 4-3. Makefile – cont. test : main.o read.o write.o gcc main.o read.o write.o -o test main.o : io.h main.c gcc -c main.c read.o : io.h read.c gcc -c read.c write.o: io.h write.c gcc -c write.c clean: rm –f *.o test

More Related