본문 바로가기

한국으로/임베디드 리눅스25

4.1 스레드란? 4.1 스레드란?4.1.1 POSIX 스레드리눅스는 POSIX 표준인 POSIX 스레드(PThread)를 사용한다.POSIX 스레드는 병렬적으로 작동하는 소프트웨어의 작성을 위해 제공되는 표준 API임.스레드는 하나의 프로세스 내에서 동작을 여러 개 진행한다. 기본적으로 하나의 프로세스는 하나의 스레드를 갖고, 추가로 스레드를 생성하는 개념임.스레드들은 하나의 프로세스 내의 자원을 공유함. 커널은 프로세스 단위가 아닌 이러한 스레드 단위로 관리 및 스케줄링한다. (커널 안에서는 태스크라는 용어 사용)스레드는 개별적인 프로그램 카운터와 스택을 가지므로 독립적으로 실행하지만,자원을 공유하기 때문에 동기화 문제가 발생한다. 4.1.2 스레드의 장단점장점쉬운 자원 공유쉬운 스케줄링작은 비용으로 구현단점동시성 문.. 2018. 6. 27.
3.4 메시지 큐 3.4 메시지 큐3.4.1 개요프로세스 간 자료 교환하기메시지 큐에 연결된 프로세스들은 메시지를 서로 보내고 받을 수 있다. 메시지 큐는 커널 영역에 존재.프로세스는 유저 영역에 존재. 소량의 데이터를 간단히 보낼 때 메시지 큐를 사용하자!메시지 큐는 동기화 문제가 없기 때문에 간단히 구현할 수 있다.반대로 공유 메모리는 대량의 데이터를 주고받을 때 사용한다. 3.4.2 메시지 큐 함수int msgget(key_t key, int msgflg);기능: 메시지 큐 생성리턴: 성공 시 메시지 큐 ID, 실패 시 errno 설정 후 -1 리턴key: 메시지 큐 접근 키msgflg: IPC_CREAT (메시지 큐가 없으면 새로 생성), IPC_CREAT | IPC_EXCL (메시지 큐가 있으면 에러) int m.. 2018. 6. 27.
3.3 공유 메모리 3.3 공유 메모리3.3.1 개요 프로세스는 독립적인 주소공간(가상메모리)를 사용하기 때문에 변수를 공유할 수 없다.공유 메모리를 통해 프로세스간 공유할수 있는 메모리를 구현하자!각 프로세스는 자신의 주소 공간에 공유메모리를 위한 세그먼트(shmbuf)를 만들고, 이 구조체를 통해 공유메모리에 접근한다. # ipcs -l현재 공유 메모리의 정보를 확인하자 3.3.2 공유메모리 함수int shmget(key_t key, size_t size, int shmflg);기능: 공유메모리 생성리턴: 성공 시 공유메모리 ID, 실패 시 errno 설정 후 -1 리턴key: 공유메모리 접근 키size: 생성할 공유메모리 크기shmflg: IPC_CREAT (공유메모리가 없으면 새로 생성), IPC_CREAT | IP.. 2018. 6. 27.
3.2 세마포어 3.2 세마포어3.2.1 개요프로세스의 동기화 문제두 개 이상의 프로세스가 하나의 자원에 동시에 접근하면 문제가 발생한다.이러한 문제를 막기 위해 정해진 개수의 프로세스만 해당 자원에 접근할 수 있도록 만들어주어야 한다."임계영역"을 구성해 정해진 개수의 프로세스만 코드 영역에 진입할 수 있도록 만들자! 세마포어로 해결세마포어는 코드의 특정 영역을 임계영역으로 만들어준다. 1) 세마포어 값이 1 이상인 경우 프로세스는 세마포어 값을 1 감소시킨 후 임계영역에 진입한다.2) 세마포어 값이 0인 경우 임계영역에 하나 이상의 프로세스가 진행중이므로 그 밖에 있는 프로세스는 자면서 기다린다.3) 세마포어 값이 다시 1 이상이 됐을 때 (임계영역에 있던 프로세스가 임계영역에서 탈출하면서 세마포어 값을 1 증가시킴.. 2018. 6. 27.