SlideShare a Scribd company logo
1 of 17
결과보고서 
“Shell_Project” 
20100434 류아침
과제의 목적 및 요구사항 
- 간단한 Shell의 구현으로 실제 CLI환경의 
프로그램수행 알고리즘과 pipe의 작동 메커니즘을 알 수 있도록 한다. 
1. Batch mode / Interaction mode 의 구분 
2. 명령의 구분 
2-1 일반명령 구분자 
2-2 “|” (pipe) 명령 구분자 
3. 기타 shell 명령 수행 시 오류 처리
과제의 목적 및 요구사항 
ERR 종료 ERR 진행 예외처리 
잘못된 개수의 argument 명령이 없음 명령줄이 빔 
배치파일이 존재하지 않음 매우 긴 명령 명령줄에 불필요 공백 
“ | | ” Quit없이 끝나는 Batch file 
파이프가 양 끝 단에 존재 Ctrl + D 를 통한 종료 
- 예외처리
구성도 
Main() 
Mode select 
Check(pipe_location) 
Shell_process() 
Get_token(‘|’) 
Check(command.lengh ) 
Check(quit command) 
Make command process 
Make_tree() 
Make fork() tree 
Execute(command)
Data flowchart 
Input user CMD 
1 CMD String 
“ | n” 
“ ” 
For(num of command){ 
fork(); 
} 
execvp 
(command_tok[0], command_tok); 
Number of 
commands 
While(isquit) 
Command tokens
CMD argument 
• Get_token()함수를 이용, 반환 시 문자열 배열과 배열의 크기를 
반환하여 명령 수에 따른 fork()를 수행 할 수 있도록 함.
Data flowchart(pipe) 
1 CMD String : char * 
“ | “ or “n” 
Command 1 : token_struct Command 2 : token_struct 
“ “ “ “ 
“|” 
Child1{ 
dup2(pipe[1], 1); 
close(pipe[1]); 
execv(); 
exit(); 
} 
Child2{ 
dup2(pipe[0], 0); 
close(pipe[0]); 
execv(); 
exit(); 
} 
out in
get_token()
| | | 
| 
| 
| 
Pipe()를 활용한 IPC 
• 자식-자식 간 통신을 지원하지 못하므로 편향 tree를 구성, 
명령을 수행한다.
Pipe()를 활용한 IPC 
• [shell_$] ls | cat | grep ch | more 
| 
| 
| 
more 
grep 
cat 
ls 
| 
| 
| 
wait 
• 말단의 node로 부터 명령을 수행하여 명령 행 순으로 수행하도록 한 
다.
Process tree flowchart 
No pipe? 
fork 
parent child 
P or C 
Dup2(in) 
Wait(child) 
Last CMD 
Excute 
CMD 
Dup2(out) 
Y 
N 
N 
Y
make_tree()
예외처리 list 
ERR 종료 
잘못된 개수의 argument 
Batch file을 찾을 수 없음 Fopen 함수의 반환이 NULL일 경우 
종료 
ERR 진행 
명령을 찾을 수 없음 Perror함수를 통해 ERR출력 
중첩 파이프 ERR 출력 후, 1개 파이프 처리 
양 끝 단에 파이프 존재 최초 CMD string 획득 시 char 배열의 
양끝을 읽어 에러표기 
예외처리 
비어있는 명령줄 Token의 길이가 0일 경우 break 
불필요 공백 Token 획득 시 무시 
Quit없이 끝나는 Batch file 
feof 함수 활용 EOF를 찾는다. 
Ctrl + D
구현 Check list 
대화모드에서 명령어가 수행된 뒤, 프롬프트가 뜨는가 Y 
배치모드에서 명령줄의 명령어들이 수행되지 전에 그 명령줄이 출력되는가 Y 
한 명령줄에 여러 개 의 명령어들을 2개이상 넣었을때, 그 개수만큼만 에러메시지가 출력되는가? Y 
‘;’과 같은 특수문자를 명령줄에 넣었을 때 인자로 인식되는가? Y 
Quit가 여러 명령어들과 같이 한 명령줄에서 수행되었을 때, 다른 명령어들이 수행되지 않는 것 
이 분명한가? 
Y 
첫 quit명령어를 수행 했을 때, 다음 명령 줄들은 모두 무시되는가? Y
최종 수행 결과
과제 수행 후 고찰 
• fork를 통해 명령을 수행 함으로써 exec()함수로 인한 shell 
process의 code부를 보호할 수 있었으며, 이는 계속해서 사용자 
명령을 받아 처리할 수 있게 하였다. 
• pipe()함수의 수행 시 kernel은 내부메모리에 IPC를 위한 자리를 
할당하게 되며, 프로세서간 메시지가 할당된 메모리보다 클 경우 
내부 메모리를 재 할당하여 늘리는 작업을 수행하게 된다. 이러 
한 kerne작업을 막기 위해 편향된 fork() tree를 구성하여 여러 
pipe를 생성하게 하여, 병렬로 프로세스를 수행하게 하였다.
참고 자료 
• http://wiki.falinux.com/ (C라이브러리 함수 참조)

More Related Content

What's hot

[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel CaliforniaTheori
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2Jinkyoung Kim
 
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)NAVER D2
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
Linux programming study
Linux programming studyLinux programming study
Linux programming studyYunseok Lee
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 ExploitGangSeok Lee
 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드GangSeok Lee
 
사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401guest91f89d83
 
Secure coding-c-preprocessor-3
Secure coding-c-preprocessor-3Secure coding-c-preprocessor-3
Secure coding-c-preprocessor-3Seungyong Lee
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
 

What's hot (14)

[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2
 
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
 
javascript02
javascript02javascript02
javascript02
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
Interpreter
InterpreterInterpreter
Interpreter
 
Linux programming study
Linux programming studyLinux programming study
Linux programming study
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
 
사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401
 
Secure coding-c-preprocessor-3
Secure coding-c-preprocessor-3Secure coding-c-preprocessor-3
Secure coding-c-preprocessor-3
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
 

Viewers also liked

오픈컨퍼런스결과보고서
오픈컨퍼런스결과보고서오픈컨퍼런스결과보고서
오픈컨퍼런스결과보고서ThinkCafe
 
[동그라미재단] ㄱ찾기 매뉴얼
[동그라미재단] ㄱ찾기 매뉴얼[동그라미재단] ㄱ찾기 매뉴얼
[동그라미재단] ㄱ찾기 매뉴얼thecirclefoundation
 
[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기
[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기
[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기Sang Hyun Park
 
2015 무중력지대대방동 annual report
2015 무중력지대대방동 annual report2015 무중력지대대방동 annual report
2015 무중력지대대방동 annual reportyouthzonedaebang
 
2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE
2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE 2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE
2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE G-Valley
 
[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료
[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료
[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료SPACECLOUD
 
2016 무중력지대 G밸리 Annual Report
2016 무중력지대 G밸리 Annual Report2016 무중력지대 G밸리 Annual Report
2016 무중력지대 G밸리 Annual ReportG-Valley
 
모떠꿈매뉴얼 최종본
모떠꿈매뉴얼 최종본모떠꿈매뉴얼 최종본
모떠꿈매뉴얼 최종본ThinkCafe
 
[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook
[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook
[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space GuidebookSang Hyun Park
 
Sg그룹 운영 결과보고서(전자정부사업부)
Sg그룹 운영 결과보고서(전자정부사업부)Sg그룹 운영 결과보고서(전자정부사업부)
Sg그룹 운영 결과보고서(전자정부사업부)Jungwoo Lee
 
마을공동체 아카이브 매뉴얼집
마을공동체 아카이브 매뉴얼집마을공동체 아카이브 매뉴얼집
마을공동체 아카이브 매뉴얼집Kwon-Jung Ji
 
[서울시마을공동체종합지원센터]우리마을프로젝트전시물
[서울시마을공동체종합지원센터]우리마을프로젝트전시물[서울시마을공동체종합지원센터]우리마을프로젝트전시물
[서울시마을공동체종합지원센터]우리마을프로젝트전시물Kwon-Jung Ji
 

Viewers also liked (12)

오픈컨퍼런스결과보고서
오픈컨퍼런스결과보고서오픈컨퍼런스결과보고서
오픈컨퍼런스결과보고서
 
[동그라미재단] ㄱ찾기 매뉴얼
[동그라미재단] ㄱ찾기 매뉴얼[동그라미재단] ㄱ찾기 매뉴얼
[동그라미재단] ㄱ찾기 매뉴얼
 
[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기
[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기
[서울시마을공동체종합지원센터]2013 마을공동체 심층사례집 우리마을돌아보기
 
2015 무중력지대대방동 annual report
2015 무중력지대대방동 annual report2015 무중력지대대방동 annual report
2015 무중력지대대방동 annual report
 
2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE
2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE 2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE
2016 무중력지대G밸리 지역청년커뮤니티활동지원사업 '지음' 활동사례집: COMMUNITY NOTE
 
[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료
[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료
[NSPACE REPORT] 방학3동 찾아가는동주민센터 마을활력소 공유공간 기획 및 운영 매뉴얼 워크숍 자료
 
2016 무중력지대 G밸리 Annual Report
2016 무중력지대 G밸리 Annual Report2016 무중력지대 G밸리 Annual Report
2016 무중력지대 G밸리 Annual Report
 
모떠꿈매뉴얼 최종본
모떠꿈매뉴얼 최종본모떠꿈매뉴얼 최종본
모떠꿈매뉴얼 최종본
 
[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook
[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook
[서울시마을공동체지원센터]커뮤니티 공간 안내서 Community Space Guidebook
 
Sg그룹 운영 결과보고서(전자정부사업부)
Sg그룹 운영 결과보고서(전자정부사업부)Sg그룹 운영 결과보고서(전자정부사업부)
Sg그룹 운영 결과보고서(전자정부사업부)
 
마을공동체 아카이브 매뉴얼집
마을공동체 아카이브 매뉴얼집마을공동체 아카이브 매뉴얼집
마을공동체 아카이브 매뉴얼집
 
[서울시마을공동체종합지원센터]우리마을프로젝트전시물
[서울시마을공동체종합지원센터]우리마을프로젝트전시물[서울시마을공동체종합지원센터]우리마을프로젝트전시물
[서울시마을공동체종합지원센터]우리마을프로젝트전시물
 

Similar to 20100434 류아침 주제2 결과보고

분석,설계보고서
분석,설계보고서분석,설계보고서
분석,설계보고서Ahchim Ryu
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxHolyTak
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxHolyTak
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제Lee Sang-Ho
 
Programming Cascading
Programming CascadingProgramming Cascading
Programming CascadingTaewook Eom
 
Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)JungGeun Lee
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 

Similar to 20100434 류아침 주제2 결과보고 (15)

분석,설계보고서
분석,설계보고서분석,설계보고서
분석,설계보고서
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptx
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptx
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제
 
Programming Cascading
Programming CascadingProgramming Cascading
Programming Cascading
 
Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
shell and process
shell and processshell and process
shell and process
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Exception&log
Exception&logException&log
Exception&log
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
팀장 잔소리
팀장 잔소리팀장 잔소리
팀장 잔소리
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 

20100434 류아침 주제2 결과보고

  • 2. 과제의 목적 및 요구사항 - 간단한 Shell의 구현으로 실제 CLI환경의 프로그램수행 알고리즘과 pipe의 작동 메커니즘을 알 수 있도록 한다. 1. Batch mode / Interaction mode 의 구분 2. 명령의 구분 2-1 일반명령 구분자 2-2 “|” (pipe) 명령 구분자 3. 기타 shell 명령 수행 시 오류 처리
  • 3. 과제의 목적 및 요구사항 ERR 종료 ERR 진행 예외처리 잘못된 개수의 argument 명령이 없음 명령줄이 빔 배치파일이 존재하지 않음 매우 긴 명령 명령줄에 불필요 공백 “ | | ” Quit없이 끝나는 Batch file 파이프가 양 끝 단에 존재 Ctrl + D 를 통한 종료 - 예외처리
  • 4. 구성도 Main() Mode select Check(pipe_location) Shell_process() Get_token(‘|’) Check(command.lengh ) Check(quit command) Make command process Make_tree() Make fork() tree Execute(command)
  • 5. Data flowchart Input user CMD 1 CMD String “ | n” “ ” For(num of command){ fork(); } execvp (command_tok[0], command_tok); Number of commands While(isquit) Command tokens
  • 6. CMD argument • Get_token()함수를 이용, 반환 시 문자열 배열과 배열의 크기를 반환하여 명령 수에 따른 fork()를 수행 할 수 있도록 함.
  • 7. Data flowchart(pipe) 1 CMD String : char * “ | “ or “n” Command 1 : token_struct Command 2 : token_struct “ “ “ “ “|” Child1{ dup2(pipe[1], 1); close(pipe[1]); execv(); exit(); } Child2{ dup2(pipe[0], 0); close(pipe[0]); execv(); exit(); } out in
  • 9. | | | | | | Pipe()를 활용한 IPC • 자식-자식 간 통신을 지원하지 못하므로 편향 tree를 구성, 명령을 수행한다.
  • 10. Pipe()를 활용한 IPC • [shell_$] ls | cat | grep ch | more | | | more grep cat ls | | | wait • 말단의 node로 부터 명령을 수행하여 명령 행 순으로 수행하도록 한 다.
  • 11. Process tree flowchart No pipe? fork parent child P or C Dup2(in) Wait(child) Last CMD Excute CMD Dup2(out) Y N N Y
  • 13. 예외처리 list ERR 종료 잘못된 개수의 argument Batch file을 찾을 수 없음 Fopen 함수의 반환이 NULL일 경우 종료 ERR 진행 명령을 찾을 수 없음 Perror함수를 통해 ERR출력 중첩 파이프 ERR 출력 후, 1개 파이프 처리 양 끝 단에 파이프 존재 최초 CMD string 획득 시 char 배열의 양끝을 읽어 에러표기 예외처리 비어있는 명령줄 Token의 길이가 0일 경우 break 불필요 공백 Token 획득 시 무시 Quit없이 끝나는 Batch file feof 함수 활용 EOF를 찾는다. Ctrl + D
  • 14. 구현 Check list 대화모드에서 명령어가 수행된 뒤, 프롬프트가 뜨는가 Y 배치모드에서 명령줄의 명령어들이 수행되지 전에 그 명령줄이 출력되는가 Y 한 명령줄에 여러 개 의 명령어들을 2개이상 넣었을때, 그 개수만큼만 에러메시지가 출력되는가? Y ‘;’과 같은 특수문자를 명령줄에 넣었을 때 인자로 인식되는가? Y Quit가 여러 명령어들과 같이 한 명령줄에서 수행되었을 때, 다른 명령어들이 수행되지 않는 것 이 분명한가? Y 첫 quit명령어를 수행 했을 때, 다음 명령 줄들은 모두 무시되는가? Y
  • 16. 과제 수행 후 고찰 • fork를 통해 명령을 수행 함으로써 exec()함수로 인한 shell process의 code부를 보호할 수 있었으며, 이는 계속해서 사용자 명령을 받아 처리할 수 있게 하였다. • pipe()함수의 수행 시 kernel은 내부메모리에 IPC를 위한 자리를 할당하게 되며, 프로세서간 메시지가 할당된 메모리보다 클 경우 내부 메모리를 재 할당하여 늘리는 작업을 수행하게 된다. 이러 한 kerne작업을 막기 위해 편향된 fork() tree를 구성하여 여러 pipe를 생성하게 하여, 병렬로 프로세스를 수행하게 하였다.
  • 17. 참고 자료 • http://wiki.falinux.com/ (C라이브러리 함수 참조)