threads
디렉토리에서 진행하며, 일부는 devices
디렉토리에서 진행threads
디렉토리 안에서thread_create()
를 호출할 때, 실행할 함수 포인터를 인자로 전달thread_create()
로 전달한 함수가 그 스레드의 main()
과 같음항상 동시에 단 하나의 스레드만 실행되고, 나머지 스레드는 대기 상태. 스케줄러가 어떤 스레드를 실행할지 결정(실행 가능한 스레드가 없으면 idle()
스레드가 실행됨). 동기화 도구들은 실행 중인 스레드를 대기 상태로 바꾸거나 다른 스레드로 컨텍스트 스위치를 유도. 컨텍스트 스위치 자체는 thread_launch()
(threads/thread.c) 안에 구현되어있으며 깊게 이해할 필요 X
각 스레드의 스택은 4KB로 고정되어 있어, 큰 지역 배열(int buf[1000];
) 같은 걸 선언하면 스택 오버플로우가 발생 가능.
init.c, init.h
main()
코드를 읽어보면 어떤 초기화가 이루어지는지 알 수 있음