지난 글에 이어서 운영체제의 기본적인 개념들을 간단하게 소개하겠습니다 :)
동시성 문제 해결
OS는 여러가지의 일을 한 번에 juggling하게 됩니다. 따라서 공통된 자원에 대해서 동시에 access를 처리함에 있어서 발생할 수 있는 문제들이 생기게 됩니다.
특히 multi-threaded program들 또한 이러한 동시성 문제를 일으키게 됩니다.
Thread란, 같은 프로세스 내에서 실행되는 하나의 단위입니다.
차례를 갖고 실행되는 프로세스와 달리, 쓰레드는 한 번에 여러 개가 실행될 수 있어 응답성 측면에서 좋습니다.
그 이유는, 각자의 자원을 갖고 있는 프로세스와는 달리 Thread는 일정 부분의 자원을 공유하게 되는데
만약 하나의 값을 공유하는 쓰레드가 동시에 값을 쓰려고 한다던 가의 이유로 인해서 오버랩되면, 이상한 값이 메모리에 남게 되겠죠.
예시로, Thread A에서 0으로 초기화 된 cnt 값을 5만큼 증가시키고, Thread B에서 굥유 자원인 cnt 값을 3만큼 증가시킨다고 해봅시다.
그러면 우리가 생각하기에는 Thread A와 B가 모두 cnt 값을 5와 3만큼 증가시켰으니 cnt에 8이 있을 것이라고 기대하겠지만,
실제로는 동시성 문제로 인해 cnt에 Thread A의 결과가 B에 의해 덮어씌워져 3이 써져있는 등의 상황이 생기게 됩니다.
즉, 쓰레드가 cnt를 증가시키는 도중에 다른 쓰레드가 끼어드는(not execute atomocially) 상황이 발생하게 되는거죠.
따라서 이러한 Concurrency Problem을 동기화나 Semaphore 등의 방법을 사용해서 해결합니다.
Persistence
DRAM과 같은 device들의 특징은, 바로 휘발성이라는 점입니다.
그말은 즉 컴퓨터가 꺼지면 데이터들이 모두 날라가버린다는 말이죠.
따라서 우리는 데이터를 영구적으로 저장하기 위한 하드웨어와 소프트웨어가 필요하게 됩니다.
그 중에서 비활성 특성을 가진 하드웨어로는 SSD나 하드 드라이브같은 I/O device가 있습니다.
소프트웨어는 이러한 디스크를 관리하는 파일시스템을 구성함으로써, user가 생성하고 저장하는 file들을 관리하게 됩니다.
이 과정에서, OS는 새로운 데이터를 어떤 disk에 저장할지 결정하고, 하드디스크와 SSD같은 storage device 관련 I/O request 들을 처리해줍니다.
또한 file system에서 생길 수 있는 충돌들을 journaling이나 copy-on-write 방식을 이용하여 완화해줍니다.
OS 디자인의 목적
첫번째로, system 관리를 편안하고 사용하기 쉽도록 추상화(abstraction)합니다.
두번째로, 높은 performance를 위해서 OS의 (특히 추상화 과정에서) 오버헤드를 줄이는 것을 목적으로 합니다.
세번째로, 각 application 간의 독립성을 보장함으로써, 각 application 가 서로에게 악영향을 끼치지 않도록 보호해줍니다.
네번째로, OS는 항시 작동하며 높은 신뢰성을 가지도록 해야합니다.
다섯번째로, 보안이나 Mobility, 에너지 효율성과 같은 측면에서의 이슈들을 잘 해결하도록 해야합니다.
이처럼 운영체제는 굉장히 다양한 일을 하는 복합적인 개념들을 다루고 있습니다.
이후부터는 이러한 개념들을 하나씩 자세히 다뤄보며 이해하는 시간을 가져보겠습니다 :)
'운영체제' 카테고리의 다른 글
[운영체제] Direct Execution과 Limited Direct Execution (0) | 2021.01.14 |
---|---|
[운영체제] 프로세스 API (0) | 2021.01.11 |
[운영체제] 프로세스(Process)란 무엇일까? (0) | 2021.01.10 |
[운영체제] CPU 가상화의 기본 개념 (0) | 2021.01.10 |
[운영체제] 운영체제 소개와 기본 개념 (1) (0) | 2021.01.06 |