1. Paging Paging이란 프로그램을 일정한 크기의 페이지 단위로 나눠서 실제 메모리에 불연속적으로 할당하는 방법을 말한다. 페이지는 4KB, 8KB, 16KB, 32KB 등으로 설정되지만 일반적으로는 페이즈의 크기를 4KB로 사용한다. 이 글에서도 4KB로 생각하면 된다. 페이지 크기가 줄어들수록 내부 조각이 적어지지만 페이지 테이블의 크기가 증가하고 반대로 페이지 크기가 크면, 내부 조각이 많이 생기지만 페이지 테이블의 크기는 줄어든다. 여기서 페이지(Page)와 프레임(Frame) 두 가지 용어를 먼저 알고 가자. 페이지(Page) : 논리적인 메모리(프로세스의 가상 주소)를 일정한 크기로 나눈 것 프레임(Frame) : 실제 물리적인 메모리(RAM)를 일정한 크기로 나눈 것 페이지는 가상 ..
OS
Contiguous allocation 1. 고정 분할 방식 이름 그대로 메모리를 분할해놓고, 프로그램이 분할된 메모리의 크기와 맞으면 할당하고 크기가 안맞으면 크기가 맞는곳에 할당을 하는 방식이다. 프로그램 A를 보면 분할 1의 크기에 맞기 때문에 할당할 수 있다. 하지만 프로그램 B를 보면 분할 2의 사이즈보다 크다. 그렇기 때문에 분할 2를 건너뛰고 프로그램A와 크기가 맞는 분할 3 메모리에 할당되게 된다. 이때 분할2번은 건너 뛰게 되는데 이를 "외부 조각"이라고 부른다. 분할 3 내부에서도 프로그램 B가 분할 3메모리를 다 채우지 못했는데, 채우지 못한 부분을 "내부 조각"이라고 부른다 보면 알겠지만 상당히 비효율적이고, 내부 조각, 외부 조각이 발생할 수 있다. 2. 가변 분할 방식 가변 분할..
1. Implicit Threading이란? 스레드를 개발자가 명시적으로 생성하거나 제어하지 않고 언어나 프레임워크에게 스레드의 생성과 관리 책임을 넘기는 것. 개발자는 따로 스레딩을 생성할 필요없이 병렬로 실행해야 할 프로그램을 걸러내어 함수형으로 실행만 시켜주면 된다. 2. Implicit Threading의 종류 2-1. Thread pool / 스레드 풀 프로세스 사용? 스레드 사용? 프로세스를 스케줄링 하는 것보다 스레드를 만들어 사용하는 게 자원 소비, 오버헤드 관점에서 훨씬 효율적인 방법이긴 하다. 이유는 프로세스 간 통신을 할 경우 shared-memory또는 Message passing같은 IPC방식을 사용해야 하기 때문에 오버헤드가 크고 context switch를 할 때 프로세스는 레..
1. 스레드란? 스레드의 정의는 프로세스 내부에서 실행되는 실행 흐름의 단위이다. 정의는 위와 같지만 어렵기 때문에 스레드는 한 프로세스 내부의 자원을 공유하면서 프로세스를 여러개로 쪼개서 실행시키는 것을 말한다. 프로세스끼리는 서로 자원 공유를 못하지만 스레드는 한 프로세스 내에 여러개가 존재하기 때문에 한 프로세스의 자원을 공유할 수 있다. 이처럼 한 프로세스 내에 여러개의 스레드가 존재하는 것을 멀티 스레드라고 한다. 싱글 스레드는 일반적인 프로세스 구조이기 때문에 이 포스팅에서는 멀티스레딩에 대해서 설명할 것이다. 2. 멀티 스레드(Multi Thread)란? 위에서 설명한 것과 같이 한 프로세스 내에서 여러개의 스레드가 존재하는 것을 멀티 스레드라고 한다. 스레드 입장에서 보면 프로세스는 스레드..
동기(Synchronous) & 비동기(Asynchronous) 동기와 비동기는 작업 순서에 관점을 둔다. 동기(Synchronous)는 작업 완료 여부에 따라 순차적으로 처리하는 것을 말한다. 프로세스 처리 순서가 A > B > A라고 했을 때 A가 완료된 후 B가 실행되고, B가 완료된 후 A가 순차적으로 처리된다.즉 작업의 순서가 보장되어야 한다. (동시성 - Concurrency) 비동기(Asynchronous)는 작업 완료 여부가 새로운 작업을 실행하는데 영향을 미치지 않는다. 프로세스가 A, B, C순서대로 시작한다고 해도 프로세스가 종료되는 순서는 A, B, C순서대로 종료된다는것을 보장하지 못한다. 즉 작업의 순서가 보장되지 않는다. (병렬성-Parallelism) 블로킹(Blocking)..
1. IPC 란? 프로세스는 스레드와 다르게 독립적으로 실행된다. 이처럼 독립적인 자원을 가진 프로세스끼리 통신에 사용되는 기법을 IPC 라고 한다. 2. 생산자-소비자 문제(Producer-Consumer Problem) 생산자란 말 그대로 정보를 생산하는 역할, 소비자란 정보를 소비하는 역할이다. 이렇게 들으면 이해가 잘 안가기 때문에 예시를 들어보자면 1. 생산자 : compiler > 어셈블리 코드 생성 // 소비자 : assembler > 어셈블리 코드를 소비하여 기계어 변환 2. 생산자 : 웹 서버 > request시에 웹 페이지 HTML코드 생성 // 소비자 : 브라우저 > HTML코드를 소비해서 화면에 랜더링 함. 이정도가 대표적인 생산자-소비자에 대한 예시가 될 것 같다. 그래서 다시 생..
프로세스가 운영체제로부터 메모리를 할당받게 되면 위와 같은 구조로 생성된다. 각 계층별 데이터를 주소가 낮은 순서대로 코드와 함께 보면서 살펴보자 Text section(.code) - 코스 코드를 실행 가능한 기계어 코드로 변환되어 저장돼 있는 영역. 함수나 명령문이 기계어로 변환되어 저장된다. - CPU는 이 부분에 있는 명령들을 하나씩 가져가서 처리한다. - 흔히 코드영역(Code Segment)라고도 한다. Data section 데이터 섹션은 전역변수와 정적변수(static)가 할당되는 공간이다. 또한 Data section은 초기화 된 변수(.data)와 초기화 되지 않은 변수(.bss) 영역으로 나뉜다. 초기화된 변수는 다시 상수를 보관하는 rodata부분과 초기화 된 전역변수를 저장하는 ...
1. Interrupt란? Interrupt의 사전적 정의 : 방해하다, 중단시키다 사전적 정의 그대로 CPU가 일을 수행하는 도중 하드웨어 장치 등에서 발생한 입출력과 같은 예기치 못한 상황을 CPU에게 알려 먼저 예외상황을 처리하도록 하는 것. 2. Interrupt 사용이유 한번에 한가지 일을 수행할 수 있는 CPU를 잠시 중단시키고 급한 Interrupt를 먼저 처리한 후 이전에 수행하던 일을 다시 수행하여 CPU의 효율을 높이기 위해 사용한다. 입출력 연산의 속도는 CPU의 명령 수행 속도보다 현저히 느리다. 하지만 한번에 한가지 일밖에 수행할 수 없는 CPU를 입출력 연산이 끝날 때까지 기다리며 놀게하면(월급루팡) 효율이 떨어지니 연산 결과가 나오기 전에는 CPU가 할 일을 하다가 Interr..