1 . Thread란?
: thread는 독립적이고 병행적인 실행흐름을 갖는 프로그램 실행단위이다.
-프로세스 안에 존재하며 프로세스의 자원을 공유한다.
-하나의 process안에 여러개의 thread
-thread는 모체인 프로세스가 존재하는 동안 실행되며 각 thread는 독립적 실행흐름을 갖는다.
-프로세스 내부의 thread는 메모리 영역(text,data)을 공유하며 stack은 별도의 stack pointer를 가진다.
-주소공간 대부분을 공유함, 생성이 빠르고 오버헤드가 작아서 경량급 프로세스(light weight process)라고 불린다.
-thread는 자신의 요구에 의해 종료되거나 프로세스가 종료될 때 같이 종료된다.
Ptheard?(Posix thread)
:운영체제마다 thread를 자체적으로 구현함, 버전이 달라서 호환이 되지 않으니까 프로그래밍하기가 쉽지 않았다.
thread를 최대한 활용하기 위해서 표준화된 API가 요구되었다.
그래서 유닉스 계열의 운영체제에서 표준 API로 나온 것이 Pthread 이다.
이제 대부분의 운영체제에서 (window포함해서) 자체적으로 나온 API이외에도 Pthread를 지원하고 있다.
오늘 배운 pthread 주소 ;
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Beginning/PthreadApiReference#AEN197
읽어봤을꺼라 생각함
2. 레코드 잠금
레코드 잠금이란(record locking)? 두개 이상의 프로세스가 하나의 파일 (또는 파일 일부)을 일정 시점에서 하나의
프로세스만파일을 이용할 수 있겟 하는 것으로 , fcntl과 lockf함수로 구현된다.
lockf함수는 fcntl함수 보다 기능이 떨어지므로 최근에는 fcntl함수 비중이 높다.
fcntl함수의 cmd에 따라 제어를 한다.
2-1) fcntl 함수
레코드 잠금은 기본형의 3번째를 사용한다.
첫번째 인수인 fd는 제어할 파일의 파일 식별자 즉 파일의 이름을 의미한다. 두 번째 인수인 cmd에서 레코드 잠금과 관련된 값에 따라 의미가 달라진다. [ 표 2-2 대표적인 cmd 인수의 값과 의미 ]
매크로 의미 F_DUPFD 새로운 파일 식별자를 부여하고 이를 반환한다 . F_GETFD close - on -exec 플래그를 얻는다. F_SETFD close - on -exec 플래그를 설정한다. F_GETFL 파일 상태 플래그를 얻는다. F_SETFL 파일 살태 플래그를 설정한다. F_GETLK 레코드 잠금 정보를 얻는다. F_SETLK 레코드 잠금 정보를 설정한다. F_SETLKW 레코드 잠금 정보를 설정한다. <위의 3개는 레코드 잠금과 관련된 cmd > 세 번째 인수인 lock의 데이터형은 struct flock로 <fcntl.h>에서는 다음과 같이 정의함.
struct flock { short l_type; // 잠금 유형 short l_whence; // 영역을 정하기 위한 기준 off_t l_start; // 영역의 시작 위치 off_t l_len; // 영역의 길이로 바이트 단위,0이면 파일의 끝까지 pid_t l_pid; // F_GETLK일 때 레코드 잠금을 설정하고 있는 프로세스의 ID }; l_whence , l_start , l_len 이 세가지를 통해 잠금을 설정하거나 해제할 영역을 지정하는데 l_whence은 lseek에서의 whence와 동일하게 어디를 기준으로 할지를 나타내는 것
l_whence 의미 SEEK_SET 파일의 시작을 기준으로 한다. SEEK_CUR 현재 읽기 / 쓰기 포인터가 가르키는 부분을 기준으로 한다. SEEK_END 파일의 끝을 기준으로 한다. l_start는 영역의 시작 위치를 나태내는 것으로 l_whence의 상대 위치다.l_len은 바이트 단위로 표시한 영역의 길이로 이 값을 0으로 하면 파일의 끝까지를 나타냄. 2-2) fcntl 함수 파일 제어하기 fd파일은 cmd에 따라 제어되고 cmd에 따라 세 번째 인수가 필요할 수도 있다.
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
2014.06.27 업무보고 - 17번 오두환 (12) | 2014.06.27 |
---|---|
20140626양태영 수업보고서(출석번호 16번) (9) | 2014.06.26 |
20140625손병규_수업정리(출석번호 14번) (8) | 2014.06.25 |
21040624서상우수업보고서 (14) | 2014.06.24 |
20140620 일일업무보고서 11번 문대영 (14) | 2014.06.20 |
20140619 업무일지 김화린[출석번호10번] (11) | 2014.06.19 |
USB3.0 32기가 공구 진행합니다~ (6) | 2014.06.19 |
2014년 06월 18일 출석번호 9번 김해성 일일업무일지 (12) | 2014.06.18 |