공부!/OS

공부!/OS

Spinlock / Mutex / Semaphore

OS에서 여러 스레드가 공유하는 공유 자원에 대한 동시성 문제를 해결하기 위해 프로그램적으로 사용하는 여러 방안들을 이론적으로 살펴보고, 해당 방법들을 간단한 자바 코드로 작성해보겠다. 그 전에 간단한 용어 소개부터. 공유 자원 : 여러 스레드 / 프로세스가 공유하는 자원. 임계 영역 : 스레드 / 프로세스가 공유 자원에 접근하는 영역. 자바 중심으로 살펴볼 것이기 때문에 실행 단위를 간단하게 스레드로 좁히겠다. 공유 자원에 대해 동시성 문제를 컨트롤하기 위해, 스레드는 임계 영역에 들어가기 전 '락(lock)'을 얻어야 한다. CS에서 동시성 컨트롤은 이 '락 컨트롤'이라 생각해도 무방하다. 락 컨트롤에는 락과 관련해서, 어떻게 스레드들이 락을 얻고, 락을 내려놓고, 어떤 스레드에게 락을 할당할지 결정..

공부!/OS

CPU 스케줄링

이하 설명은 CPU의 실행 단위인 프로세스와 스레드를 묶어서 "프로세스"라는 용어를 사용하겠다. 1. 멀티 프로세스 / 스레드의 동시성 컴퓨터는 동시에 여러 일을 진행한다. 크롬 탭으로 유튜브 노래를 틀면서 이렇게 글을 작성할 수도 있고, 동시에 카카오톡 pc 앱을 켜서 카카오톡도 이용하고, 그러면서도 연결된 아이폰의 문자 알림을 계속해서 받을 수 있는 것이다. 그렇다고 해서 실제로 컴퓨터가 동시에 2개 이상의 명령어를 수행하는 것은 아니다. 여러 개의 프로세스를 시분할로 번갈아가면서 수행하고 있을 뿐이다. 타자를 치는 것, 타자를 친 결과가 티스토리 에디터에 전달되는 것, 에디터에 전달된 내용이 서버에 올라가는 것, 그 내용이 다시 노트북의 화면에 나타나는 것은 전부 다른 프로세스가 담당한다. 정확히 ..

공부!/OS

Sync / Async / Blocking / Non-Blocking

머리로 이해하고 마음으로 느껴야하는 토픽인 것 같다--! 내 나름대로 이해한 것을 이해의 과정에 따라 정리해보겠다. 1. 개념적 차이 1) Blocking vs Non-Blocking : 호출하는 쪽에서 "블락(막힘)" 당하는가? 블로킹은 보통 "막히다"라는 뜻으로 쓰인다. 배구에서 스파이크를 치려는데 블락 당하거나, 특정 사이트의 접근이 블락 당하거나.. 이런 의미에서 Blocking / Non-Blocking은 호출하는 쪽에서 일을 할 수 있냐의 여부에 초점이 맞춰져 있다. Blocking이라면 블락당해서 결과가 전해질 때까지 호출하는 쪽은 아무것도 하지 못한 채 대기하고, Non-Blocking이라면 결과의 여부와 상관 없이 호출하는 쪽에선 무언가를 할 수 있다. 여기서 무언가를 한다는 것은 "제어..

김부추
'공부!/OS' 카테고리의 글 목록