캐시는 데이터나 값을 미리 복사해 놓는 임시 장소로, 시스템의 효율성을 위해 사용됩니다. 캐시를 사용하면 속도가 빠른 장치와 느린 장치 사이에서 속도 차이에 따른 병목 현상을 완화할 수 있다는 이점이 있습니다.
++<캐시는 언제 쓸까?>
- 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우
- 값을 다시 계산하는 시간을 절약하고 싶은 경우
프로그램이 운영체제로부터 할당 받는 메모리 공간은 실행할 프로그램의 코드가 저장되는 영역인 코드 영역, 프로그램의 전역 변수와 정적 변수, 문자열 상수가 저장되는 데이터 영역, 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 스택 영역, 사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 힙 영역으로 구성됩니다.
경쟁 상태는 공유 메모리를 사용하기 때문에 발생합니다. 경쟁 상태를 해소하기 위해서는 공유 메모리를 쓰는 프로세스/스레드 간 동기화가 필요합니다.
동기화는 임계 구역(경쟁 상태를 유발할 수 있는 코드 조각)에서 프로세스/스레드의 순차적 실행을 보장함으로써 임계 구역을 상호 배제적으로 만드는 것으로 수행될 수 있습니다. 방법은 크게 세마포어와 뮤텍스 두 가지가 있습니다.
++<뮤텍스와 세마포어>
- 뮤텍스: 뮤텍스는 Key 에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 쓰레드 or 프로세스 만이 공유자원에 접근할 수 있다.
- 세마포어: 공유 리소스에 접근할 수 있는 최대 허용치 만큼 동시 사용자(쓰레드 or 프로세스) 접근을 허용하게 한다.
++<뮤텍스 vs 세마포어>
- 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.
- 세마포어는 소유할 수 없으며, 뮤텍스는 소유할 수 있고 소유주가 그에 대한 책임을 가진다.
- 세마포어는 동기화 대상이 여러개 일 때 사용하고, 뮤텍스는 동기화 대상이 오로지 하나 일 때 사용된다.
운영체제는 하드웨어 자원을 관리하고, 응용 프로그램과 하드웨어 사이를 중재하는 인터페이스를 의미합니다.
커널은 메모리에 상주 하는 운영체제의 핵심 부분입니다. 운영체제 전체를 메인 메모리에 올렸을 때 메모리 공간의 낭비가 발생하기 때문에, 커널이라는 운영체제의 핵심 부분 만을 메인 메모리에 적재하여 운영체제를 사용합니다.
Mutual exclusion(상호 배제)
매 순간 하나의 프로세스만이 자원을 사용할 수 있다.
Non-preemption(비선점)
프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않는다.
Hold and wait(점유 대기)
자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있다.
Circular wait(순환 대기)
자원을 기다리는 프로세스 간에 사이클이 형성되어야 한다.
Deadlock Ignorance Deadlock을 시스템이 책임지지 않음Deadlock이 일어나지 않는다고 생각하고 아무런 조치도 취하지 않습니다. 사실 Deadlock은 매우 드물게 발생하므로 deadlock에 대한 조치 자체가 더 큰 overhead를 불러올 수 있습니다.
시스템에 deadlock이 발생한 경우, 시스템이 비정상적으로 작동하는 것을 사람이 느낀 후에, 직접 process를 kill하는 방식으로 대처합니다.
왜 필요한가?
가상 메모리를 사용하면 사용자 프로그램이 물리적 메모리보다 커져도 실행이 가능하기 때문입니다. 즉, 사용자가 메모리 크기에 관련한 문제를 염려하지 않아도 된다. 운영체제는 가상 메모리 기법을 사용하여 프로그램의 논리적 주소 영역에서 필요한 부분만 물리적 메모리에 적재하고, 직접적으로 필요하지 않은 메모리 공간은 디스크에 저장하게 됩니다.
하는 일
프로세스가 사용하는 메모리 공간의 범위를 가상 세계로 제한 시켜서, 애플리케이션이 죽어도 OS에는 이상이 없도록 합니다. (시스템 안정성)
구현 방식
프로세스가 생성될 때 독자적인 주소 공간이 만들어지며, 각 프로세스마다 0번지부터 시작한다. 이 개별적인 논리적 주소를 주소 바인딩하여 물리적 주소로 바꾸어 처리합니다.
RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용 가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태를 보고 메모리 단편화가 발생했다고 합니다.

++<메모리 단편화는 내부 단편화와 외부 단편화로 구분 가능하다.>
내부 단편화(Internal Fragmentation)
메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비 되는 상황
외부 단편화(External Fragmentation)
메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 된다. 이 때 중간중간에 생긴 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황
크롬 탭이 스레드라면, 한 크롬 탭에서 오류가 생기면 다른 크롬 탭에도 영향이 갈 수 있습니다. 따라서 한 탭에 오류가 생기더라도 다른 탭에 영향을 끼치지 않는다는 특성에 의해, 크롬 탭은 별개의 프로세스인 것을 알 수 있습니다.