운영체제 정리

Seokwon Han·2021년 2월 16일
0

CS 지식 정리

목록 보기
6/6

프로세스와 스레드

프로세스란 운영체제에서 할당하는 작업의 단위로 실행중인 프로그램입니다. 운영체제는 프로세스마다 각각 독립된 메모리영역을 할당해주기 때문에 프로세스 간에는 자원을 공유하지않습니다.
스레드는 프로세스 내에서 실행되는 흐름의 단위입니다. 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역을 공유하기 때문에 서로 읽고 쓰는게 가능합니다.

멀티프로세싱과 멀티스레딩

멀티프로세싱이란 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는것이고 멀티스레딩이란 하나의 응용프로그램을 여러 개의 스레드로 구성하여 각 쓰레드가 하나의 작업을 처리하도록 하는것입니다.
멀티프로세싱은 독립된 구조이기 때문에 안정성이 높지만 Context Switching으로 인한 오버헤드가 발생합니다. 멀티스레딩은 메모리를 공유하기 때문에 프로세스간 통신에 비해 부담이 적고 시스템 자원을 효율적으로 관리할 수 있지만 공유된 자원에 대해 동기화 문제가 발생할 수 있습니다.

Context Switching?

컨텍스트 스위칭이란 CPU가 여러 프로세스를 돌아가면서 작업을 처리할 때 현재 프로세스 상태를 보관하고 다음 순서의 프로세스 상태로 교체하는 작업을 뜻합니다.

Race Condition(경쟁상태)이란?

여러 프로세스나 스레드가 동기화 메커니즘 없이 자원에 접근하려는 상황을 말합니다.

Critical Section(임계 구역)이란?

임계구역이란 여러 프로세스가 동시에 접근해서는 안되는 공유자원의 코드영역입니다. 한 임계구역에는 하나의 프로세스나 스레드만 접근이 가능하며 이를 제어하기 위해 세마포어, 뮤텍스 같은 메커니즘을 사용합니다.

Critical Section 문제를 해결하기 위한 조건

상호배제, 진행, 한정대기 세가지를 모두 충족해야합니다
상호배제: 한 프로세스가 임계구역에 들어가있으면 다른 프로세스는 들어갈 수 없는 것입니다.
진행: 임계구역에 들어간 프로세스가 없다면 어느 프로세스가 들어갈 것인지 적절히 선택해주는것입니다.
한정대기: 기아상태를 방지하기위해 한번 들어갔다 나온 프로세스는 다음에 들어갈 때 제한을 주는것입니다.

교착상태란? 발생조건? 해결방법?

교착상태란 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 기다리는 상태를 말합니다
발생조건은 상호배제, 점유대기, 비선점, 순환대기가 있습니다.
상호배제: 한번에 한 프로세스만 자원을 사용해야 하는것입니다.
점유대기: 할당된 자원을 가진 상태에서 다른 자원을 기다리는것입니다.
순환대기: 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고있는것입니다.
비선점: 다른 프로세스가 자원의 사용을 끝낼때까지 자원을 뺏을 수 없는것입니다.
해결방법으로 예방, 회피, 회복, 무시가 있습니다.
예방: 4가지 조건 중 하나라도 만족되지 않도록 하는것입니다.
회피: 교착상태를 막는 알고리즘을 적용하여 막는 방법입니다.
(은행원 알고리즘: 프로세스가 자원을 요구할 때 자원을 할당해도 안전한지를 검사한 후 자원을 할당함)
회복: 교착상태가 발생할 때 해결합니다.
무시: 교착상태의 해결방법이 성능저하가 심하다면 교착상태를 무시합니다.

기아상태란? 해결방안?

기아상태란 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스의 우선순위가 낮아서 자원을 계속 할당받지 못하는 상태입니다. 이를 해결하기 위해선 우선순위를 수시로 변경해주거나 Queue를 사용하여 우선순위를 해결하는 방법이 있습니다.

세마포어와 뮤텍스

세마포어와 뮤텍스는 여러 프로세스가 공유자원에 접근하는 것을 제어하기 위한 기법입니다.
뮤텍스는 공유자원에 접근할 때 lock을 걸어 다른 프로세스가 접근하지 못하도록하고 lock을 걸은 프로세스만이 lock을 해제할 수 있습니다. 그리고 오직 한 개의 프로세스만이 접근할 수 있습니다.
세마포어는 세마포어의 변수만큼의 프로세스가 공유자원에 접근할 수 있으며 lock을 걸지않은 프로세스도 lock을 해제할 수 있습니다. 또한 세마포어의 변수를 1로 설정하면 뮤텍스처럼 사용할 수 있습니다.

캐시를 사용하는 이유?

cpu가 매번 메모리에서 데이터를 받아오면 시간이 오래걸리기 때문입니다. 하지만 캐시에 자주 사용하는 데이터를 담아둔다면 처리 속도를 높일 수 있습니다.
자주 사용하는 데이터는 지역성의 원리를 따라 시간지역성과 공간지역성으로 나눌수 있습니다. 시간지역성은 최근에 접근한 데이터에 다시 접근하는 경향을 의미하고 공간지역성은 최근에 접근한 데이터의 주변공간에 다시 접근하는 경향을 의미합니다.

가상 메모리에 대해 설명해보세요.

가상메모리는 RAM의 부족한 용량을 보완하기 위해 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방식입니다. OS는 프로세스의 페이지 중에서 덜 중요한것들을 하드디스크에 옮겨놓고 관련 정보를 페이지테이블에 기록합니다. 만약 페이지폴트가 생기면 가상메모리를 통해서 데이터를 가져오게 되는데 가상메모리는 하드디스크에 저장되어있으므로 속도의 저하가 발생합니다.

profile
개발하면서 새로 배우거나 경험한 내용을 정리하고 그 외의 공부한 내용을 기록하는 곳입니다.

0개의 댓글