서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.

밑에 글에 이이서 다시 올립니다.


=========================================

1. page8 설명에서

일단 약간의 보충 설명을 하자면... process란 녀석을 좀 더 설명하자면


http://www.aesop.or.kr/?mid=Board_Documents_AndroidPlatform&document_srl=431536


링크이 IPC 설명이 있는 부분을 보시면 조금 이해가 쉬우실겁니다.


유닉스는 multi-process system이기도 하고 multi-tasking system이기도 합니다.

약간의 용어가 혼동이 되실텐데...


- process: 하나의 실행화일이 ram에 로딩되어서 동작되는 것을 얘기합니다. 하나의 실행화일이 여러개가 실행이 될 수도 있고, 다른 실행화일이 여러개가 실행될 수도 있습니다. 이 상태를 multi-process라고 얘기합니다.


- task: "일을 한다"라는 개념으로 이해하시면 됩니다. 즉, "하나의 일을 처리하는 실행의 흐름 "으로 보시면 됩니다.

유닉스에서는 thread란 개념과 일맥 상통합니다.


task란 개념은 보통 unix에서 쓰는 개념은 아닙니다. RTOS와 같은데서 훨 더 많이 사용합니다.


task란 개념은 unix에서는 thread란 개념과 동일한 개념으로 보면 됩니다. 일반 process는 하나의 task(thread)를 가지는 실행 프로그램을 얘기합니다.


multi-task == multi-thread == one process

single-task == single-thread == one process


위와 밑이 틀린데, 결과는 one process랑 동일하게 볼 수 있다는 얘기인데, 이건 뭔 소리냐????


간단하게 하나의 process는 "여러개의 실행흐름"을 가질 수 있다입니다. 이게 우리가 통상적으로 얘기하는 pthread(POSIX  thread) programming에 관련된 얘기입니다.


"여러개의 실행흐름을 가질 수 있다"라는 얘기는 하나만도 가질 수 있다라는 얘기입니다.

이러한 process가 여러개가 존재할 때 쓰는 용어가 'multi-process"라는 단어입니다.


좀 복잡하죠??? ^^


그럼 process는 어떻게 생성이 될까요?????


fork()라는 system call을 호출하면 생깁니다. ㅎㅎ, 이 녀석은 기존에 설명하던 open, read, write, ioctl, close

와는 다른 system call로 나중에 따로 설명하도록 하겠습니다.

====================================================================


2. 다시 page 8 의 system call설명으로 돌아가면 


1> open()은 앞에서 설명하였고,

2> ioctl()을 설명하자면....


ioctl() 시스템 call은 간단하게 얘기하자면


"디바이스 드라이버 별로 특수하게 제어해야할 명령에 대한 application과 드라이버의 약속을 처리하기 위한 system call"

입니다.


간단하지 않죠??ㅎ, 진짜 간단하게 설명하면 "디바이스 드라이버 별로 따로 제어하고 싶어할 때 사용하는 system call"입니다.


어떤 경우냐 하면.....문자 드라이버(character device driver - 정의는 나중에 다시 설명)중 유명한거 2개를 예로 설명드리겠습니다.


sound와 framebuffer(LCD나 그래픽 카드 드라이버)는 둘 다 문자드라이버에 속합니다.

open, read, write, ioctl, close 이런 system call을 이용해서 제어하도록 되어 있는 드라이버입니다.


드라이버 종류에서 볼 수 있듯이 사운드와 비디오는 완전히 다른 동작을 하는 드라이버입니다.

사운드는 소리 관련이고, 비디오는 display 관련입니다.


그런데 어떻게 같은 system call을 이용하는지 예전에는 정말 궁금했었습니다.


여기에 ioctl()의 용도가 있습니다.


open()을 해서 드라이버를 열고, ioctl()을 이용해서 각각 제어를 하는 것입니다.


※ system call에 대한 참고자료는 추후에 바로 다음 강의 때 aesop-2440 때 배용규님이 정리해 주셨던 자료를 정리해서 첨부해 놓겠습니다.


========================================================

page 9


앞에서 조금 길게 설명한 system call에서 볼 수 있듯이


- UNIX system은 응용 프로그램의 호환성을 높이고자 system call들의 표준화를 꾀했으며

- 이를 위해서 모든 디바이스 드라이버에 대한 접근을 system call을 이용해서 하도록 강제하고 있다.


그래서,


"UNIX 에서는 모든 것이 파일"이라는 말이 있는 것입니다.


예를 들어 aa.txt 란 파일이 있습니다. 이 파일을 오픈하고자 할 때는


fd = open("/root/aa.txt", O_RDONLY);


이런식이고, 시리얼 포트를 오픈할때는


fd = open("/dev/ttyS0", ........);


이런식으로 오픈이 되는 것입니다..


더더욱 재미있는 것은 UNIX Domain Socket은 소켓 API를 이용하지만, 실제 적용은 파일로 이루어지는 것입니다.

이것은 굉장히 중요한 내용이므로 확실히 메모해 두는 것이 좋을 듯 합니다.


이 페이지에서는 대략................파일들의 종류에 대해서 나열하였습니다.


============================================================


나머지는 한번 읽어보시면 대략 아실 듯 합니다.


다음 장은 시스템 call의 사용과 리눅스에서 개발할 때 필요한 툴체인이 어떤것이 있는지 살펴보도록 하겠습니다.







"사람은 자기가 보고 싶은 현실만 볼 뿐이다." - Gaius Julius Caesar
엮인글 :
http://www.aesop.or.kr/index.php?mid=Board_Community_Book&document_srl=38371&act=trackback&key=0db
List of Articles
번호 제목 글쓴이 날짜 조회 수

[Linux와 Android] 002 - UNIX/Linux system 개요(Continue......

[Linux와 Android] 002 - UNIX/Linux system 개요 file

[Linux와 Android] 001 - 임베디드 시스템에 대하여 file

사용자 로그인