Process 와 Thread 관련 내용 자료 수집이며 간단히 Linux 기준으로 정리한다.
- Process관련사항
기본적인 OS에서 배운 Scheduler 중심으로 이해를 하면 될 듯하며, 주요 포인트는 다음과 같다
- Scheduler 의 정책 (FIFO,우선순위큐,등)
- Multi-Core기반의 Scheduler (AMP, SMP)
- Process 의 Status 와 IPC (Signal, Semaphore,Message Queues 등)
- Thread관련사항
Thread 의 경우, Linux 는 kernel 와 User Thead가 다르므로 주의하며 이를 이해하자
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C1.1. Thread의 종류
- Scheduler Activation
- User Thread 와 Kernel Thread 장단점 및 스케쥴 및 차이
- Thead Table 즉 Thead 의 Scheduler 의 위치에 따라 User 와 Kernel 구분
- 그림 설명이 너무 좋아 쉽게 이해 가능
- Thead를 Why 사용하는지
- 이유는 Process 에 대한 효율성 증가 (즉 Parrellel 허용)
http://www.slideshare.net/kasunbg/scheduler-activations-effective-kernel-support-for-the-userlevel-management-of-parallelism
- TLDP의 Therads FAQ
Kernel Thread 의 경우 SMP(Symmetric Multi-Processing) 효율,
즉 다중 Core에 대한 Scheduing이 핵심이기에 더 보게 되어지는 것이다.
http://www.tldp.org/FAQ/Threads-FAQ/Types.html
1.2 Process 와 Thread 비교
User Thead 와 Process 의 비교 https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C#.EC.82.AC.EC.9A.A9.EC.9E.90_.EB.A0.88.EB.B2.A8_.EC.8A.A4.EB.A0.88.EB.93.9C_.28User-Level_Thread.29
2. OS의 Scheduling
기본적으로 OS를 한번은 알고 와야 할 듯 하다.
http://www.tldp.org/FAQ/Threads-FAQ/Types.html
1.2 Process 와 Thread 비교
User Thead 와 Process 의 비교 https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C#.EC.82.AC.EC.9A.A9.EC.9E.90_.EB.A0.88.EB.B2.A8_.EC.8A.A4.EB.A0.88.EB.93.9C_.28User-Level_Thread.29
2. OS의 Scheduling
기본적으로 OS를 한번은 알고 와야 할 듯 하다.
학교 다닐 때, 배운 OS 책을 가져와서 한번 보면 될 듯하다.
2.1 Linux Kernel Scheduling
2.1 Linux Kernel Scheduling
- Linux Scheduler
RTOS급은 안되더라도, Linux의 Real Time OS의 지향과 FCFS
만약 Hard RTOS와 비교를 하고 싶다면, Vxworks 와 비교하는 것이 가장 낮을 듯하다.
나도 Vxworks 오래 사용했지만, Vxwork 만큼 빠른 Low Latency 아직 본적 없는 듯하다.
2000년 대 초만 해도 Vxworks 와 Tornado Tool 같이 제품을 양산 여러 번 했지만, 가장 훌륭하다.
https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf
2.2 Pthread Scheduling
User Thread로 대표적으로 Pthead 이며, 사실 이거 이외 다른 User Thread는 잘 모르겠다.
https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf
2.2 Pthread Scheduling
User Thread로 대표적으로 Pthead 이며, 사실 이거 이외 다른 User Thread는 잘 모르겠다.
- Pthread 의 Scheduling 의 기본이해
http://www.icir.org/gregor/tools/pthread-scheduling.html
Pthead의 Scheduling 설정
http://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html
http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html#tag_02_08_04_01
http://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html
http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_08.html#tag_02_08_04_01
Pthead의 Scope 설정
즉 Scheduing 과 함께 Pthead 의 범위를 설정하여 이를 조절하는 것
http://man7.org/linux/man-pages/man3/pthread_attr_setscope.3.html
Pthread 의 사용 예제
http://stackoverflow.com/questions/6108988/understanding-linux-scheduling-when-pthreads-are-involved
3. RTOS 소개
4. Concurrent Programming
https://ko.wikipedia.org/wiki/%EC%8B%9D%EC%82%AC%ED%95%98%EB%8A%94_%EC%B2%A0%ED%95%99%EC%9E%90%EB%93%A4_%EB%AC%B8%EC%A0%9C
https://en.wikipedia.org/wiki/Dining_philosophers_problem
https://en.wikipedia.org/wiki/Concurrent_computing
https://en.wikipedia.org/wiki/Parallel_computing
5. Deadlock 과 LiveLock
Case 1.
이해하기도 간단하며,
Process P1는 Resource R2 이미 Lock 을 하였고,이를 사용중이지만,
현재 R1을 사용하기를 원하지만, 이미 P2에 의해 Lock이되어 사용하지 못한다.
Process P2는 Resouce R1 이미 Lock을 하였고, 이를 사용중이지만,
현재 R2를 사용하기를 원하지만, 이미 P1에 의해 Lock이되어 사용하지 못한다.
Case 2.
Black line: lock 사용하는 semaphore 가 될수 있겠다.
Pthread 의 사용 예제
http://stackoverflow.com/questions/6108988/understanding-linux-scheduling-when-pthreads-are-involved
3. RTOS 소개
- 무료 RTOS 소개 및 관련소스
- RTOS의 기본개념 및 상용 RTOS 비교
4. Concurrent Programming
- OS에 나오는 기본내용
https://ko.wikipedia.org/wiki/%EC%8B%9D%EC%82%AC%ED%95%98%EB%8A%94_%EC%B2%A0%ED%95%99%EC%9E%90%EB%93%A4_%EB%AC%B8%EC%A0%9C
https://en.wikipedia.org/wiki/Dining_philosophers_problem
https://en.wikipedia.org/wiki/Concurrent_computing
https://en.wikipedia.org/wiki/Parallel_computing
5. Deadlock 과 LiveLock
Case 1.
이해하기도 간단하며,
Process P1는 Resource R2 이미 Lock 을 하였고,이를 사용중이지만,
현재 R1을 사용하기를 원하지만, 이미 P2에 의해 Lock이되어 사용하지 못한다.
Process P2는 Resouce R1 이미 Lock을 하였고, 이를 사용중이지만,
현재 R2를 사용하기를 원하지만, 이미 P1에 의해 Lock이되어 사용하지 못한다.
Case 2.
- 4개의 Process가 1개의 자원을 가지고 있을 경우, Deadlock
Black line: lock 사용하는 semaphore 가 될수 있겠다.
Green : Process의 시작 시점
Red : Process의 종료 시점
Gray : Resource 의미 하며, 크기는 Time을 의미 한다.
위 상황은 binary semaphore를 4개 or 1개 사용하는 것인지 좀 헷갈림.(Resource 1개 )
Red : Process의 종료 시점
Gray : Resource 의미 하며, 크기는 Time을 의미 한다.
위 상황은 binary semaphore를 4개 or 1개 사용하는 것인지 좀 헷갈림.(Resource 1개 )
1의 semaphore로 각 Process에서 쓰니 1개로 되는 듯하다 (나중에 다시 확인)
이미 한 Process에 의하여 Resource에 1st Lock 걸린 상태에서, 스케쥴에의해
다른 한 Process가 동시에 Resource에 접근을 할 경우, 다시 2nd Lock이 걸리며,
- 1개의 Resource와 2개의 lock으로 인하여 발생하는 Deadlock
이미 한 Process에 의하여 Resource에 1st Lock 걸린 상태에서, 스케쥴에의해
다른 한 Process가 동시에 Resource에 접근을 할 경우, 다시 2nd Lock이 걸리며,
결론적으로 진입점 인 Lock 이 둘다 Lock으로 변경이 되어 Deadlock이 됨.
특정 Process가 간단히 말해, 자원을 점유를 못해 동작을 못하는 것이다.
https://en.wikipedia.org/wiki/Starvation_(computer_science)
Linux의 동기화
재미 있게 알고 싶다면, Process 동기화를 기본은 확실히 알자.
https://en.wikipedia.org/wiki/Starvation_(computer_science)
Linux의 동기화
재미 있게 알고 싶다면, Process 동기화를 기본은 확실히 알자.
Semaphore 이용하여 Process 간의 신호도 만들어 보자
더 나아가 이 기반으로 통신도 가능하다


