본문 바로가기
코스웨어/14년 스마트컨트롤러

20140623 박영주 일일보고서

by 알 수 없는 사용자 2014. 6. 23.
728x90
반응형

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에 따라 세 번째 인수가 필요할 수도 있다.

 

 

 

 

 

 

 

 

728x90