Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react-query
- 완전탐색
- react
- DP
- 알고리즘
- 재귀
- CSS
- DFS기초
- django
- Express
- JS
- 코테
- 스택
- 코딩테스트
- 코드트리
- 블챌
- 코딩테스트실력진단
- 문자열
- 백준알고리즘
- 스택자료구조
- 백준
- DFS
- 그리디알고리즘
- 자료구조
- DFS활용
- BFS
- socket.io
- 구현
- 파이썬
- 그리디
Archives
- Today
- Total
꾸준하게 거북이처럼
운영체제 면접 예상질문 2-2 본문
- 쓰레드에 대해 설명해주세요.
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위입니다.
- +) 프로세스와 차이: 프로세스는 운영체제로부터 자원을 할당받은 작업의 단위임.
- 비유로 들자면, 크롬 브라우저 실행 시 프로세스 하나 생성 -> 우리는 파일을 다운 받으며, 온라인 쇼핑, 게임을 할 수 있다.하나의 프로세스 내에서 여러가지 작업들 흐름이 동시에 진행되며, 이런 흐름을 스레드라고 함.
- +) 프로세스와 차이: 프로세스는 운영체제로부터 자원을 할당받은 작업의 단위임.
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위입니다.
- 쓰레드의 메모리 공간에 대해 설명해주세요.
- 프로세스의 4가지 메모리 영역인 (code, data, heap, stack) 중 각 스레드는 stack만 할당받아서 복사하고, code, data,heap은 프로세스 내의 다른 스레드들과 공유됩니다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 이외는 공유하기 때문에 서로 다른 스레드에서 읽고 쓸 수 있게 됩니다.
- +) 더 이해해보기: 독립적인 스택을 가졌다는 것 -> 독립적인 함수 호출 가능하다는 의미 -> 독립적인 실행 흐름 가능 => 스택을 별도로 가지면서 스레드는 독립적인 실행 흐름을 가짐! (실행 단위)
- +) 이렇게 구성한 이유: 하나의 프로세스를 여러 스레드로 구분하여 자원을 공유하고 자원 생성 및 관리에 중복성을 최소화해서 수행 능력을 올리기 위해서
- 프로세스의 4가지 메모리 영역인 (code, data, heap, stack) 중 각 스레드는 stack만 할당받아서 복사하고, code, data,heap은 프로세스 내의 다른 스레드들과 공유됩니다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 이외는 공유하기 때문에 서로 다른 스레드에서 읽고 쓸 수 있게 됩니다.
- 쓰레드 제어블록(TCB)에 대해 설명해주세요.
- 각 스레드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있는 자료구조입니다.
- TCB는 PCB 안에 들어있으며 상태정보, 스레드 ID, 스레드 우선순위 등 다양한 정보를 저장합니다
- 스레드가 생성될 때 생성이되며 스레드가 실행을 마치고 소멸될 때 함께 소멸합니다.
- 스레드 간의 자원 공유와 동기화도 TCB를 사용하여 관리가 됩니다.
- 사용자 수준 쓰레드와 커널 수준 쓰레드의 차이를 설명해 보세요.
- 사용자 수준 스레드
- 스레드를 관리하는 라이브러리로 인해 사용자 단에서 생성 및 관리되는 스레드입니다. 그래서 커널이 따로 관리하지 않아 이 스레드에 대해서 알지 못합니다. (커널의 통제권 안에 없음)
- 사용자 수준 스레드 N개가 커널 수준 스레드 1개에 매핑 됩니다.
- 장점: 커널은 스레드의 존재를 알지 못하기 때문에 모드간 전환이 없소 컨텍스트 스위칭이 없어서 커널 스레드 보다 오버헤드가 적음.
- 단점: 프로세스 내의 한 스레드가 블로킹 되면, 나머지 스레드 전부 블로킹 됨. ( 커널의 관리를 받지 않으므로, 공유자원에 대한 무결성 문제를 위해 모두 멈추는 것.)
- 커널 수준 스레드
- 커널 레벌에서 생성되는 스레드로, 커널이 직접 관리하는 방식입니다. 사용자 수준 스레드와 커널 수준 스레드가 1:1 매핑됩니다.
- 장점: 각 스레드를 개별적으로 관리가 되므로 한 스레드가 대기 상태여도 다른 스레드를 실행 시킬 수 있다.
- 단점: 커널이 직접 스케줄링하고 실행하므로 컨텍스트 스위칭 발생하여 유저 모드 커널 모드 사이를 반복하며 오버헤드가 생길 수 있다.
- 사용자 수준 스레드
- 멀티 쓰레딩 프로그래밍 대해서 설명해주세요.
- 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것으로,
- 코어가 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써 여러 작업들이 모두 동시에 수행되는 것처럼 보이게합니다.
- 멀티 쓰레드 프로그래밍의 장단점을 설명해 주세요.
- 장점
- 일부 스레드가 중단 되거나 긴 작업을 수행해도, 다른 스레드가 사용자에 대해 응답할 수 있습니다. (응답성)
- 스레드 간의 컨텍스트 스위칭을 캐시메모리를 비울 필요가 없어서 프로세스 간 컨텍스트 스위칭에 비해 빠릅니다.
- 단점: 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업을 하기 때문에 발생할 수 있는 동기화 문제들을 고려해서 신중하게 프로그래밍 해야합니다.
- 장점
- 멀티 프로세스대신 멀티 쓰레드를 사용하는 이유가 뭔가요?
- 멀티 스레드의 경우에는 스레드 간에 스택과 레지스터 값 등 일부 정보만 변경되어서 CPU 캐시 메모리는 초기화 되지 않아서 컨텍스트 스위칭 비용을 줄일 수 있어서 빠르게 응답할 수 있기 때문입니다.
- 멀티 쓰레드 프로그래밍에서 주의할 점이 있을까요?
- 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업을 하기 때문에 발생할 수 있는 동기화(synchronization), 교착상태(deadlock) 과 같은 문제들을 고려해서 신중히 프로그래밍 해야합니다.
- Thread-Safe하다는 의미와 그렇게 설계하는 방법을 설명해 주세요.
- 멀티 스레드 프로그래밍에서 공유자원에 동시에 접근이 이루어져도문제가 생기지 않는다는 것을 말합니다.
- 구현 방법
- 상호 배제: 스레드에 lock 또는 세마포어를 걸어서 공유자원에는 하나의 스레드만 접근 가능하게 하는 법
- 원자적 연산: 공유 자원 접근시, 원자적으로 정의된 접근 방법을 사용하여 상호 배제를 구현하는 것 ( 읽고 값을 변경하는 것 등등 하나하나 연산을 쪼개기)
- 불변 객체 사용: 공유 자원 사용시 불변객체를 사용하는 방법으로, 불변객체를 사용하면 읽기 전용 자원이기 때문에 여러 스레드가 동시 접근해도 스레드 안정성이 보장됨.(변경할 수 없도록 만들기)
'Computer Science > 운영체제' 카테고리의 다른 글
운영체제 면접 예상질문 4주차 (0) | 2024.09.03 |
---|---|
운영체제 면접 예상질문 3주차 (0) | 2024.08.29 |
운영체제 면접 예상질문 2-1 (0) | 2024.08.21 |
운영체제 면접 예상 질문 답변 준비하기 1-2 (0) | 2024.08.14 |
운영체제 면접 예상 질문 답변 준비하기 1-1 (0) | 2024.08.13 |
Comments