[운영체제 아주 쉬운 세 가지 이야기 - Concurrency] 32. Concurrency Bugs
교착 상태와 비 교착 상태로 나뉘는 병행성 버그의 전형적인 패턴과, 이를 피하는 방법을 정리했습니다.
교착 상태와 비 교착 상태로 나뉘는 병행성 버그의 전형적인 패턴과, 이를 피하는 방법을 정리했습니다.
락과 컨디션 변수를 모두 대체할 수 있는 세마포어의 정의와, 생산자/소비자, Reader-Writer, 식사하는 철학자 문제에 적용하는 방법을 정리했습니다.
락만으로 부족한 상황에서 조건이 참이 될 때까지 대기하는 컨디션 변수의 사용법과, 생산자/소비자 문제를 해결하는 과정을 정리했습니다.
카운터, 연결 리스트, 큐, 해시 테이블에 락을 추가해 쓰레드 안전하게 만들면서 성능도 확보하는 방법을 정리했습니다.
임계 영역을 보호하는 락의 개념과, 인터럽트 제어부터 Test-And-Set 기반 스핀 락까지의 구현 방법을 정리했습니다.
POSIX 쓰레드의 생성과 종료, 락과 컨디션 변수 사용법, 그리고 컴파일 방법을 정리했습니다.
쓰레드의 개념과 데이터를 공유할 때 생기는 경쟁 조건, 그리고 원자성이 필요한 이유를 정리했습니다.
객체 지향 설계와 데이터 지향 설계의 차이를 메모리 캐싱 관점에서 비교하고, 대규모 데이터 처리에서 성능이 달라지는 이유를 정리했습니다.
메모리가 부족할 때 내보낼 페이지를 고르는 교체 정책으로 최적, FIFO, 무작위, LRU를 비교하고 성능을 정리했습니다.
물리 메모리보다 큰 주소 공간을 지원하는 스왑 공간과 present bit, 그리고 페이지 폴트 처리 과정을 정리했습니다.