본문 바로가기
반응형

Computer Science/운영체제15

스레드 안전(Thread Safe)을 지키기 위한 방법 스레드란 CPU 이용의 기본 단위로써 프로세스의 실행 단위이다. 하나의 프로세스는 한 개 이상의 스레드를 가질 수 있는데, 이처럼 다수의 스레드를 수행하는 것을 멀티 스레딩이라고 한다. 프로세스 내부의 스레드들은 각각 스택 영역을 독립적으로 가지지만 스택 영역을 제외한 힙, 데이터 영역을 서로 공유하기 때문에 스레드들이 동시에 공유 자원에 접근하게 되면 예상치 못한 결과가 발생할 가능성이 생기게 된다. 간단한 예시로 현재 통장에 100만원이 들어있다고 하자. 만약 공유 자원에 대한 동시 접근을 막지 않았다면 N명이 동시에 100만원을 출금을 해버리면 100만원이 Nx100만원이 돼버리는 문제가 발생하게 된다. 이러한 상황을 "스레드 안전(Thread Safe)하지 않은 상황"이라고 부른다. 스레드 안전(.. 2021. 8. 15.
멀티 프로세싱 vs 멀티 프로그래밍 vs 멀티 태스킹 vs 멀티 스레딩 운영체제를 공부하다 보면 멀티(Multi)가 붙은 용어들이 많다는 것을 알 수 있다. ​대표적으로 멀티 프로세싱(Multi-processing), 멀티 프로그래밍(Multi-programming), 멀티 태스킹(Multi-tasking), 멀티 스레딩(Multi-threading)이 존재한다. ​이들에 대해서 한번 알아보도록 하자. 멀티 프로세싱(Multi-processing) ​멀티 프로세싱은 다수의 프로세서가 협력적으로 일을 처리하는 것을 의미한다. 여기서 주의해야 할 점은 프로세스가 아니라 프로세서이다. 보통 하나의 프로세서(CPU)가 하나의 작업을 맡지만 멀티 프로세싱은 다수의 프로세서가 다수의 작업을 함께 처리하는 것을 의미한다. 멀티 프로세싱의 장점은 하나의 프로세서가 고장이 나더라도 해당 프.. 2021. 7. 7.
동시성(Concurrency) vs 병렬성(Parallelism) 동시성과 병렬성은 전혀 다른 개념이지만 헷갈리기 쉬운 용어라 혼동되어 사용하는 경우가 많다. 이번 기회에 이 둘에 대해서 확실하게 개념을 정리하도록 하자. ​음료를 판매하는 카페를 예시로 두 개념의 차이를 알아보자. ​ 먼저 동시성(Concurrency)이다. 동시성은 말 그대로 동시에 작업을 수행하는 것을 의미한다. 카페에서 손님이 음료를 주문하게 되면 직원은 결제 후 음료를 만들어서 제공한다. 이는 CPU에 해당하는 직원이 주문, 결제, 생산이라는 3가지의 프로세스를 진행하여 최종적으로 손님에게 음료를 제공한다고 이해할 수 있다. 여러 명의 손님이 대기하고 있다고 하자. CPU는 한 번에 하나의 프로세스만 수행할 수 있다. 현재 손님이 주문한 음료가 만드는데 시간이 많이 걸리는 음료라면 뒤에 있는 손.. 2021. 7. 7.
가상기억장치 구현 시 시스템 성능에 영향을 미치는 요소 가상기억장치를 구현할 때 페이지 크기, Locality, 워킹 셋, 페이지 부재 빈도, 프리페이징 등 다양한 요소들이 시스템 성능에 영향을 미친다. 각각에 대해서 간단하게 살펴보도록 하자. ​ 첫 번째로 페이지 크기이다. 페이징 기법을 사용하면 프로그램을 페이지 단위로 나누게 되는데, 페이지의 크기에 따라 시스템에 미치는 영향이 다르다. 페이지 크기가 작을 경우 페이지 단편화가 감소되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어듬 불필요한 내용이 주기억장치에 적재될 확률이 낮으므로 효율적인 워킹 셋을 유지할 수 있음 Locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아짐 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어짐 디스크 접근 횟수가 많아져서 전체적인.. 2021. 7. 7.
페이지 교체 알고리즘 주기억장치 메모리 공간의 한계를 프로세스 전체가 메모리 내에 올라오지 않더라고 실행이 가능하도록 하는 가상기억장치 기법을 통해 해결한다고 하였다. ​가상기억장치는 주로 페이지 단위로 관리한다. 가상기억장치는 프로그램 전체를 메모리에 적재하지 않는 대신, 초기에 필요한 것들만 미리 메모리에 할당하는 요구 페이징(Demand Paging)이라는 전략을 주로 사용한다.​ 요구 페이징 전략을 통해 몇 개의 페이지가 메모리에 할당되고 프로그램을 실행한다고 가정하자. 프로그램 실행 시 필요한 페이지가 요구 페이징 전략을 통해 할당되지 않았을 수도 있다. 즉, 필요로 하는 페이지가 주기억장치에 없는 페이지 부재(Page Fault)가 발생할 수 있다. ​페이지 부재가 발생하게 되면, 원하는 페이지를 보조기억장치에서 .. 2021. 7. 7.
가상기억장치 할당 기법 이전 글에서 주기억장치에 프로그램을 할당하는 방법을 공부하였다. 하지만 주기억장치의 메모리 공간은 제한적이기 때문에 결국 메모리의 크기보다 많은 프로그램들이 올라갈 수 없다. 이를 해결하기 위해 나온 것이 바로 가상기억장치이다. 가상기억장치란 주기억장치 안의 프로그램 양이 많아질 때, 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것으로, 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법이다. ​즉, 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리하는 방식이다. ​ 가상기억장치에 저장된 프로그램을 실행하기 위해선 가상기억장치의 주소를 주기억장치의 주소로 변환하는 작업이 필요하.. 2021. 7. 6.
주기억장치 할당 기법 이전 글을 통해 한정된 주기억장치의 메모리 공간을 효율적으로 사용하기 위해 반입, 배치, 교체 전략을 활용한다고 공부하였다. 전략 기법을 통해 최종적인 과정은 프로그램을 주기억장치 메모리 공간에 할당하는 것이다. 이 또한 마찬가지로 무턱대고 아무렇게나 메모리에 프로그램을 할당한다면 굉장히 비효율적일 것이다. ​즉, 주기억장치 할당 기법은 프로그램이나 데이터를 실행시키기 위해 주기억장치에 어떻게(How) 할당할 것인지에 대한 방법이며, 연속 할당 기법과 분산 할당 기법으로 분류할 수 있다. 이번 글에서는 주기억장치에 프로그램을 할당하는 방법 중 연속 할당 기법에 대해서 알아보자. 먼저 단일 분할 할당 기법이다. 단일 분할 할당 기법은 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 한순간에는 오직 한 .. 2021. 7. 6.
메모리 관리 전략 멀티 프로세스 환경에서 성능을 향상시키기 위해서는 주 메모리에 여러 개의 프로세스가 올라와서 서로 공유하도록 해야 한다. 이때 운영체제가 어떤 프로세스를 메모리에 올릴 것인지를 판단한다. ​우선 메모리 계층 구조를 간단하게 살펴보고 넘어가자. 메모리 계층 구조는 다음과 같이 레지스터, 캐시 기억장치, 주기억장치, 보조기억장치로 이루어져 있다. 여기서 주의 깊게 봐야 할 메모리는 보조기억장치와 주기억장치이다. 각각 하드디스크, RAM을 생각하면 쉽다. ​과거의 프로그램들은 메모리 크기가 작았기 때문에 주기억장치에 모두 올릴 수 있었지만 현대의 프로그램들은 메모리가 굉장히 크기 때문에 모든 프로그램을 주기억장치에 올릴 수 없다. 주기억장치의 공간은 제한적이기 때문이다. 따라서 제한된 공간에 적절한 프로그램을.. 2021. 7. 6.
교착상태(Deadlock) 다중 프로그래밍 환경에서는 여러 프로세스들이 한정된 자원을 사용하려고 서로 경쟁할 수 있다. 한 프로세스가 자원을 요청했을 때, 자원을 사용할 수 없는 상황이 발생할 수 있고, 그 경우 프로세스는 대기 상태로 들어간다. 이처럼 대기 중인 프로세스들이 대기 상태를 변경할 수 없는 상황을 교착상태라고 한다. ​즉, 교착상태는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 의미한다. ​ 교착상태가 발생하기 위해서는 다음 네 가지 조건이 모두 충족되어야 한다. 현재의 대부분의 운영체제들은 교착상태를 막을 수 없다. 따라서 교착상태가 발생했을 때 이를 처리하는 3가지 방법이 존재한다. 그렇다면 교착상태를 처리하는 방법들에 대해서 간단하게 알.. 2021. 7. 6.
반응형