semaphore

    [운영체제] Ch6. 동기화 도구들

    [운영체제] Ch6. 동기화 도구들

    공룡책(운영체제)을 읽고 정리한 글입니다. 서론 지금까지 공부하면서 프로세스가 병행하게 또는 병렬로 실행될 수 있다는 것을 알 수 있었다. CPU 스케줄러는 프로세스 사이에서 빠르게 오가며 각 프로세스를 병행 실행시킨다. 이는 현재 프로세스는 다른 프로세스가 스케줄링 되기 전까지만 CPU에서 실행됨을 의미한다. 프로세스의 실행중에 언제든지 인터럽트가 발생할 수 있으며, CPU코어는 언제든지 다른 프로세스의 명령어를 받아들일 수 있다. 이러한 병행, 병렬성 때문에 데이터 무결성에 문제가 생기게 된다. 그래서 이 챕터에서는 어떤 문제가 발생하는지 알아볼 것이다. 간단한 예를 먼저 알아보자 프로세스 사이의 메모리 공유를 1차원 배열의 유한 버퍼를 이용해 구현했던 코드이다. 생산자는 버퍼의 크기가 count와 ..

    [운영체제] Semaphore

    [운영체제] Semaphore

    운영체제의 병행성 기법 중 하나인 Semaphore에 대해서 알아보자 Semaphore는 정수 값을 가지는 객체라고 생각하면 된다. Sem_wait(), Sem_post()같이 Semaphore의 값을 조절하는 함수를 가지고 있다. 첫 번째 인자는 Semaphore객체, 두 번째 인자는 여러 개의 쓰레드에 의해서 공유되고 있다는 것을 의미, 세 번째 인자는 Semaphore값을 1로 초기화 하겠다는 뜻이다. Semaphore의 2가지 동작에 대해서 알아보자 sem_wait() Semaphore값을 1 감소시킨다. 값이 0 이상이라면 즉시 return 한다. 값이 음수가 된다면 wait상태에 들어가고, sem_post()가 호출될 때까지 wait 한다. 여러 개의 쓰레드가 sem_wait()을 호출한다면 ..