다양한 범주의 병행성 문제 해결을 위해서는 락과 조건 변수가 모두 필요하다. 이번 장에서는 세마포어(semaphore) 라는 동기화 기법에 대해 알아볼 것이다. 세마포어는 락과 컨디션 변수로 모두 사용할 수 있다.핵심 질문: 세마포어를 어떻게 사용하는가락과 컨디션 변수
컨디션 변수 1. 정의와 루틴들 2. 생산자/소비자(유한버퍼) 문제 불완전한 해답 개선된, 하지만 아직도 불완전한: if문 대신 while문 단일 버퍼 생산자/소비자 해법 최종적인 생산자/소비자 해법 3. 컨디션 변수 사용 시 주의점 4. 요약
자료구조에 락을 추가하여 쓰레드가 사용할 수 있도록 만들면, 그 구조는 쓰레드 사용에 안전(thread safe)하다고 할 수 있다.핵심 질문: 자료구조에 락을 추가하는 방법자료구조에 어떤 방식으로 락을 추가해야 정확하게 동작하게 만들 수 있을까?자료구조에 락을 추가하
병행 프로그램의 근본적인 문제여러 개의 명령어들을 원자적으로 실행하고 싶지만, 단일 프로세서의 인터럽트로 인해 불가능이 장에서는 앞서 다룬 락(Lock)을 이용하여 임계 영역을 하나의 원자 단위 명령어인 것처럼 실행되도록 해볼 것이다.락을 사용하여 임계 영역(balan
쓰레드 API의 주요 부분을 간략하게 알아보자.핵심 질문: 쓰레드를 생성하고 제어하는 방법운영체제가 쓰레드를 생성하고 제어하는데 어떤 인터페이스를 제공해야 할까?어떻게 이 인터페이스를 설계해야 쉽고 유용하게 사용할 수 있을까?첫번째 인자 thread: pthread_t
쓰레드(thread): 프로세스 내에서 실제로 작업을 수행하는 주체멀티 쓰레드 프로그램은 하나 이상의 실행 지점을 가지고있다.멀티 쓰레드 프로그램은 단일 PC값을 사용하는 고전적인 관점에서 벗어나 독립적으로 Load/Execute 될 수 있는 여러 PC 값을 갖는다.
페이징은 잘못 설계하면 상당한 성능 저하를 가져올 수 있다.페이징은 프로세스 주소공간을 고정 크기의 페이지로 나누고, 각 페이지의 실제 위치(매핑 정보)를 메모리에 저장매핑 정보를 저장하는 자료구조를 페이지 테이블이라고 함근데 이 페이지 테이블이 잡아먹는 메모리 공간이
운영체제는 공간 관리 문제를 해결할 때 크게 두 가지 방법으로 세그멘테이션이나 페이징을 사용한다.세그멘테이션: 가상 메모리를 "가변 크기"의 조각들로 분할공간을 다양한 크기의 청크로 분할할 때 공간 자체가 단편화 되는 단점단편화로 인해 할당이 점점 어려워짐페이징: 공간
빈 공간 관리 (Free Space Management) > 핵심 질문: 빈 공간을 어떻게 관리하는가 관리하고 있는 공간이 고정 크기의 단위로 나뉜 경우엔 관리 쉬움 하지만 가변 크기의 요구를 충족시키긴 어려움 세그멘테이션으로 물리 메모리를 관리하는 운영체제에서는 필
세그멘테이션 프로세스를 물리 메모리에 재배치하는 방법으로는 베이스/바운드 레지스터를 사용하는 방법이 있다. 이 방법에는 단점이 있는데, 스택과 힙 사이에 사용되지 않는 공간이 크다는 것이다. 즉, 메모리 낭비가 심하고, 유연성이 없다는 단점이 존재한다. > 핵심질문
주소 변환의 원리 제한적 직접 실행 (LDE) 사용자 모드와 커널 모드로 구분하여 명령어 실행 커널 모드에서만 특권 명령어(privilege command) 실행 가능 프로세스가 시스템 콜을 호출하거나 타이머 인터럽트가 발생할 때 등의 특정 순간에는 운영체제가 개입하
메모리 관리 API 이번 장에서는 UNIX/C의 메모리 관리 인터페이스에 대해 논의한다. (여기서의 메모리는 "사용자 주소 공간"을 의미함) > 핵심 질문: 어떻게 메모리를 할당하고 관리해야 하는가 일반적으로 어떤 인터페이스가 사용되는가? 어떤 실수를 해서는 안 되
초기에는 컴퓨터 시스템을 구현하는 것이 쉬웠다.사용자가 많은 것을 기대하지 않았기 때문이다.하지만 이후 "사용자 편이", "고성능", "신뢰성" 등을 기대한 사용자들이 등장하였고, 그때부터 시스템을 구축하는 것이 복잡해졌다.메모리 관점에서 초기 컴퓨터는 비교적 단순하게
현재 만들고 있는 토이 프로젝트에서 채팅 기능을 구현하고자 하였다. 채팅 기능을 구현하기 위해서는 웹소켓에 대해서 알아야 했다. 웹소켓이란? 처음에 채팅 기능을 구현할 때 HTTP를 이용해서 구현하려고 했다. 하지만 HTTP는 요청과 응답이라는 구조로 통신이 이
멀티프로세서 스케줄링(multiprocessor scheduling)은 어려운 주제이므로 기본적인 내용만 다룰 것이다. 병행성(concurrency)에 대해 어느정도 공부를 한 후에 다루는 것이 가장 좋다.멀티프로세서 시스템: 두 개 이상의 CPU를 가진 컴퓨터 시스템
이번 장에서는 시간을 최적화 하는 것보다는, 작업의 비율 배분에 초점을 맞춘 스케줄러를 알아볼 것이다.비례 배분 (공정 배분, fair share): 반환시간이나 응답시간을 최적화하는 대신 스케줄러가 각 작업에게 CPU의 일정 비율을 보장하는 것추첨 스케줄링 (lott
Multi-level Feedback Queue (MLFQ)Compatible Time-Sharing System에 사용됨MLFQ가 해결하고자 하는 문제짧은 작업을 먼저 실행시켜 "반환시간" 최적화SJF, STCF 알고리즘은 실생시간 정보를 필요로 하지만, 실제론 실행
스케줄링: 다중 프로그래밍을 가능하게 하는 운영체제의 동작 기법.즉, 어떤 프로세스를 실행시키거나 중단할지 결정하는 것다양한 스케줄링 정책이 있고, 이는 discipline이라고도 볼림핵심질문: 스케줄링 정책은 어떻게 개발하는가?스케줄링 정책의 핵심 가정은?어떠한 평가
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL \[n/a]; constraint \[null] 게시글을 삭제하려고 하면 오류 발생게시글 삭제 DB에서 ch