임베디드/리눅스시스템프로그래밍(97)
-
pthread_join과 pthread_detach의 차이
두 함수 모두 스레드가 종료하면 사용된 자원에 대해서 즉시 free를 한다 다만, join은 두 번째 인자인 void **형태의 반환값을 받아와서 또 다른 제어를 할 수 있다. 하지만 detach는 그런 것 없이 바로 할당된 메모리를 해제한다 그리고 join은 blocking, detach는 non-blocking 함수로, 프로세스인 메인 스레드에서 join의 사용은 뒷 코드의 내용이 바로 실행되지 않는다는 특징이 있다
2019.11.03 -
pthread
pthread는 POSIX 표준 API 스레드다. 기본 glibc 라이브러리 함수가 아닌 libpthread 라이브러리에 포함되어 있으므로 컴파일 시 명시적으로 -pthread 옵션을 명시해야만 한다 스레드 반환값은 어떻게 받아서 확인할 수 있을까? join의 두번째 인자로 받아올 수 있다
2019.11.03 -
파일 API와 mmap 차이
프로세스가 파일을 읽는 방법에는 총 2가지가 있다 1. 파일 디스크립터 2. mmap을 통해 파일의 내용을 메모리에 매핑하여 사용 파일 디스크립터로 파일을 읽는 행위는 지양된다. 물리적인 거리에 의해서 프로세스가 디스크에서 파일을 읽는 속도는 매우 느리다. 그리고 읽는 도중에는 blocking이 되어 있으므로 CPU 효율이 떨어지게 된다 즉 OS 측면에서는 1. 시스템 콜 2. 스케쥴러 3. 인터럽트의 일을 수행하게 되고 컴퓨터구조 단에서는 1. DMA 2. System Bus 을 통해서 개선할 수 있지만 따로 추가해야 하는 부분이다 따라서 mmap의 장점은 1. 가상 메모리에 파일을 매핑하는 mmap을 사용하면 위의 일들을 줄여줄 수 있다 2. 파일의 내용을 읽을 때 제어되는 위치지정자 역시 fseek..
2019.11.01 -
open과 O_CREAT 그리고 mode_t
파일을 open할 때 두 개의 오버로딩된 함수가 존재한다. 그 중 하나는 맨 마지막에 mode_t가 붙은 하나다 int open(const char *pathname, int flags, mode_t mode) mode는 파일을 생성할 때 부여되는 권한 설정이다. 따라서 대개 0644 권한을 많이 대입한다. 반드시 O_CREAT때만 효력이 발생하고, 파일이 존재한다면 mode 권한은 재설정되지 않는다
2019.11.01 -
쉘 스트립트 sleep
쉘 스크립트에서 명령어를 순차적으로 진행하고 싶지만 시간 간격을 두고 해야만 할 때 sleep으로 지연시킬 수 있다
2019.10.28 -
pthread_create시 attr 속성
pthread_create는 다음과 같이 정의가 되어있고, 순서대로 thread 주소, 속성, 루틴 함수, 루틴 함수의 매개변수가 담겨져 있다 #include int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); attr에 대한 구조체 주소를 넘겨주면 내부적으로는 int pthread_attr_init(pthread_attr_t *attr) 함수가 호출된다. 아래 속성은 man page에서 따온 속성값으로, 프로그래밍적으로 아래 옵션들을 적용해서 스레드를 생성할 수 있다 1. detach 가능한 스레드 생성 2. 스케쥴링 정책과 우선순위 설정 가능 3. 스택 사이..
2019.10.21