메모리 할당 : 메모리에 프로그램을 할당할 때, 시작 메모리의 위치와 메모리의 할당 크기를 바탕으로 할당하는데 연속 할당과 불연속 할당으로 나뉜다.
메모리 연속 할당 : 메모리에 연속적으로 공간을 할당한다.
내부 단편화 : 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 발생하는 현상
외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 발생하는 현상
메모리 불연속 할당 : 메모리에 불연속적으로 공간을 할당한다.
메모리를 동일한 크기의 페이지로 나누고 프로그램마다 페이지 테이블을 만들어서 이를 통해 메모리에 프로그램을 할당한다.
페이징 : 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다.
세그멘테이션 : 세그먼트 단위로 나눈다.
페이지드 세그멘테이션 : 공유나 보안을 의미단위의 세그먼트로 나누고 물리적 메모리는 페이지로 나눈다.
페이지 교체 알고리즘
프로세스 : 컴퓨터에서 실행되고있는 프로그램이다.
스레드 : 프로세스 내 작업의 흐름이다.
컴파일 과정 : 전처리 -> 컴파일러가 어셈블리어로 변환 -> 어셈블러가 목적코드로 변환해줌 -> 목적 코드 생성 -> 링커가 라이브러리와 함께 링킹 -> 실행이 가능한 파일이 만들어짐.
정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식이다. 외부 의존도가 낮으며 메모리 효율성이 떨어지는 단점이 있다.
정적 라이브러리 : 프로그램 실행 시 필요한 경우에만 DLL이라는 함수 정보를 통해 참조하며 메모리의 효율성이 높아지지만 외부 의존도가 높아진다.
프로세스 상태
프로세스 메모리 구조
Process Control Block : 프로세스에 대한 메타데이터를 저장한 데이터를 말한다. 프로세스 생성 시 운영체제는 해당 프로세스에 대한 PCB를 생성한다. 프로세스가 생성될 때는 프로세스 주소 값과 스택, 힙 구조를 기반으로 메모리가 할당된다. 그리고 이 프로세스의 메타데이터들이 PCB에 저장되어 관리된다. 프로세스의 핵심 정보들이 들어가있기때문에 커널 스택의 앞부분에서 관리된다.
메타데이터 : 데이터에 관한 구조화된 데이터이자 데이터를 설명하는 작은 데이터를 칭한다.
컨텍스트 스위칭 : PCB를 교환하는 과정이다. 프로세스에 할당된 시간이 끝나거나 인터랩트가 생길 경우 발생한다.
Inter Process Communication : 프로세스 간 데이터를 주고 받거나 공유 데이터를 관리하는 메커니즘이다.
공유 메모리 : 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스 간 통신이 가능할 수 있도록 공유 버퍼를 생성한다.
소켓 : 동일한 컴퓨터의 다른 프로세스 혹은 네트워크를 통해 다른 컴퓨터의 네트워크 인터페이스를 통해서 전송하는 데이터이다.(TCP, UDP)
익명 파이프 : 프로세스간 FIFO 방식으로 읽을 수 있는 파이프를 기반으로 데이터를 주고받는다, 단방향 방식이며 쓰기 전용의 파이프를 만들어서 동작한다. 부모 자식 프로세스 사이에만 사용 가능하며 네트워크상에서는 사용 불가능하다.
명명 파이프 : 파이프 서버와 다수의 파이프 클라이언트 간 통신을 위한 이중 파이프이다. 단일 컴퓨터 내의 다른 프로세스 간 혹은 네트워크 상에서 다른 컴퓨터와도 통신을 수행할 수 있다.
메시지 큐 : 메세지를 큐 자료 구조 형태로 관리한다.
공유 자원 : 시스템 안에서 프로세스, 스레드가 같이 접근할 수 있는 자원 혹은 변수등을 의미한다. 만약 공유 자원을 다수의 프로세스가 동시에 읽거나 쓰려고 할 경우 경쟁 상태가 발생하게 된다.
임계 영역 : 공유 자원에 접근 시 순서와 같은 요인으로 인해 결과가 달라지는 영역이다. 임계 영역 문제를 해결하기 위한 방법으로 세마포어, 뮤텍스, 모니터가 있다.
뮤텍스 : 공유 자원을 사용하기 전에 설정하고 사용 후에는 해제하는 잠금이다. 잠금이 설정될 경우 다른 스레드는 이 코드 영역에 접근할 수 없다. 뮤텍스는 잠금 혹은 잠금 해제의 상태 하나만을 가진다.
세마포어 : 정수 값과 함수로 공유 자원에 대한 접근을 처리한다. 뮤텍스를 일반화한 방법이다. 프로세스가 공유 자원에 접근할 경우 세마포에서 wait을 시도하고 프로세스가 공유 자원을 해제한다면 세마포어에서 signal을 수행한다. 프로세스가 세마포어 값을 수정중일때는 다른 프로세스가 동시에 세마포어 값에 수정하는 것이 불가능하다.
모니터 : 둘 이상의 스레드 혹은 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 접근에 대한 인터페이스만 제공한다.
교착 상태 : 둘 이상의 프로세스가 서로가 가지고 있는 자원을 기다리며 중단된 상태이다. 교착 상태의 원인으로는 한 프로세스가 자원을 독점하고 있어 다른 프로세스들이 접근 불가하거나(상호 배제) 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태(점유 대기) 다른 프로세스의 자원을 강제적으로 가져올 수 없는(비선점)것도 원인이 될 수 있으며 프로세스가 서로의 자원을 요구하는(환형 대기) 케이스도 있다.
교착 상태 해결 방법
함수 호출 스택
함수의 호출과 관계되는 지역 변수와 매개변수는 메모리의 스택 영역에 저장된다. 이 스택 영역은 함수의 호출과 함께 할당되며 함수의 호출이 끝나면 소멸한다. 즉 함수 호출 시
스택 영역에 함수의 매개변수, 호출이 끝난 뒤 돌아가야 할 반환 주소 값, 함수에서 선원된 지역 변수가 저장된다.(이 정보들을 스택 프레임이라고 부르기도한다.)