PCB(Process Control Block)
커널은 프로세스를 생성할 때마다 프로세스 제어 블록(PCB)을 생성하여 프로세스의 정보를 저장한다.
그리고 프로세스 테이블에 PID(프로세스 번호)와 함께 PCB를 연결한다.
TCB(Thread Control Block)
스레드의 정보를 담는 TCB는 스레드가 생성될 때 만들어지고, 종료되면 제거된다.
운영체제는 TCB를 통해 스레드의 존재를 인식하며 TCB 중 하나를 선택하여 CPU에게 실행시킨다.
커널 레벨 스레드
- 커널에 의해 생성되고 스케줄링되는 스레드
- 사용자가 시스템 호출을 통해 커널 레벨 스레드를 만들면 -> TCB가 커널 공간에 만들어지고 -> TCB에 기록된 스레드 주소는 응용프로그램의 코드를 가리키게 된다.
- 컴퓨터를 부팅할 때 커널을 돕기 위한 목적으로만 만들어지는 커널 레벨 스레드도 존재하는데, 이를 순수 커널 레벨 스레드라고 한다.
사용자 레벨 스레드
- 스레드 라이브러리에 의해 스케줄링되는 스레드
- 응용프로그램은 스레드 라이브러리 함수를 호출하여 스레드를 생성하고, 스레드 라이브러리는 생성한 사용자 수준 TCB(U-TCB)를 사용자 공간에 저장한다.
- 사용자 레벨 스레드는, 사용자 주소 공간에 적재된 스레드 라이브러리의 스케줄러 코드에 의해 선택되어 실행된다.
사용자 레벨 스레드와 커널 레벨 스레드 1:1 매핑
사용자 레벨 스레드의 개수만큼 커널 레벨 스레드가 생기므로 비용 부담이 크지만, 멀티 코어 CPU에서 높은 병렬성을 얻을 수 있어서 대부분의 운영체제가 1:1 매핑을 적용하고 있다.
1:1 매핑에서의 멀티 스레드 동작 원리
4개의 코어를 가진 CPU가 탑재된 컴퓨터라는 가정.
1. 응용프로그램이 실행되면(->프로세스가 생성) 커널 공간에 PCB와 TCB4를 생성하고 TCB4의 시작 주소는 main() 함수의 주소를 기록한다.
2. 커널은 TCB4를 스케줄하여 코어3에 할당하고, 코어3은 main() 함수 실행을 시작한다.
3. main() 함수에서 스레드 라이브러리의 함수를 호출하여 새 스레드를 생성할 뿐만 아니라, 시스템 호출을 통해 커널 레벨 스레드 생성을 요청한다.
4. 이 결과 커널에 TCB5가 생성되고, TCB5의 시작 주소에 사용자 스레드2의 주소가 기록된다. (동일한 방식으로 시용자 스레드3과 TCB6 생성)
5. 커널이 TCB6를 선택하여 코어4에 할당하면 사용자 스레드3이 코어4에 의해 실행된다.
6. 이렇게 되면 응용프로그램에서 만든 스레드 2개가 서로 다른 코어에서 동시에 실행된다.
'개발 지식' 카테고리의 다른 글
MySQL 아키텍처 (0) | 2025.04.04 |
---|---|
EOF(End of File) 개념과 사용 예시 (0) | 2025.03.27 |
웹서버 애플리케이션 관점에서의 Thread Pool (0) | 2025.03.21 |
NullPointerException(NPE) 런타임 에러 (1) | 2025.03.11 |
JVM 메모리 구조 (0) | 2025.02.25 |