5.1 프로세스 관리
5.1.1 커널 프로세스 관리
프로세스
5.1.2 커널의 태스크 관리
task_struct 객체
태스크 상태
프로세스 변경하기
Copy-on-Write
fork() 이후에 쓰기 작업이 일어나야만 복제가 된다. 메모리 누수를 피하기 위함.
다시 말해, 비용을 최소화하기 위해 자식이 복제된 순간에는 부모의 task_struct 객체를 가리키는 '가상' 자식 프로세스가 만들어진다.
이후에 자식 프로세스는 쓰기 작업을 함으로써 부모의 자원을 완전히 복제하거나,
exec()을 호출하여 새 자원으로 갱신하게 된다.
스레드
커널은 스레드를 하나의 태스크로 보고 관리한다.
커널 입장에서 스레드는 다른 프로세스와 자원을 공유하는 '프로세스'이다.
스레드의 생성 과정: 유저영역 --> pthread_create() --> clone() --> 커널영역 --> _do_fork() --> copy_process()
프로세스의 생성 과정: 유저영역 --> fork(); --> clone() --> 커널영역 --> _do_fork() --> copy_process()
커널 영역에서는 스레드와 프로세스의 생성 과정이 동일하다. (_do_fork() 에 의한 생성)
따라서, 커널 스레드가 생성될 때, task_strut 객체가 마찬가지로 생성된다.
스레드(태스크)의 종료는 do_eixt()으로 처리한다.
하지만, 이 함수가 호출되더라도 task_struct 객체는 남아있기 때문에 부모 프로세스의 wait()이 호출되어야 비로소 진정한 종료가 된다.
(wait() 함수가 호출된 경우 또는 커널이 해당 프로세스가 필요없다고 판단한 경우에 release_task() 함수가 호출되어 task_struct 객체가 완전히 제거된다.)
5.1.3 리눅스 스케줄러
스케줄링 정책
O(1) 스케줄러
CFS 스케줄러
나이스 값에 따라 할당 비율을 정해 타임 슬라이스를 결정한다.
각 태스크의 반복 시간이 고정되므로 응답 시간이 보장된다.
각 태스크의 점유율을 조절하기가 쉬워진다.
SCHED_FIFO (First-in First-out): 타임 슬라이스 할당이 없음.
SCHED_RR (Round Robin): 타임슬라이스가 있다.
'한국으로 > 임베디드 리눅스' 카테고리의 다른 글
7.1 디바이스 드라이버 (0) | 2018.07.01 |
---|---|
5.4 파일시스템 (0) | 2018.07.01 |
5.3 메모리 관리 (0) | 2018.06.29 |
5.2 시스템 콜 (0) | 2018.06.28 |
4.2 스레드 동기화 (0) | 2018.06.28 |
4.1 스레드란? (0) | 2018.06.27 |
3.4 메시지 큐 (0) | 2018.06.27 |
3.3 공유 메모리 (0) | 2018.06.27 |