[운영체제] 페이징이란?(1) / 페이지 테이블, 페이징 동작 순서 페이징(Paging) 프로세스는 생성되면 실제 필요한 데이터를 일정한 특정 단위의 메모리로 조각낸다. 이 조각낸 메모리들은 모두 크기가 같으며, 조각낸 것들을 묶어서 물리 메모리에 넣고 필요할 jerryjerryjerry.tistory.com 이전 포스팅 글의 내용에서 다뤘던 페이징이 일어나는 순서에 대해서 다시 요약해보겠다. 페이징 동작 순서 큰 틀로 요약 ① CPU가 특정 프로세스를 실행시키기 위해 가상 주소를 운영체제에게 요청한다. ② 이 가상 주소를 받아서 처리하는 것은 MMU이다. MMU가 맨 처음 CPU에 있는 CR3 레지스터에 접근하여, 메모리에 있는 처리할 프로세서의 페이지 테이블의 주소를 가져온다. MMU는 특정 프로세스..
페이징(Paging) 프로세스는 생성되면 실제 필요한 데이터를 일정한 특정 단위의 메모리로 조각낸다. 이 조각낸 메모리들은 모두 크기가 같으며, 조각낸 것들을 묶어서 물리 메모리에 넣고 필요할 때 조회하며, 필요없어지면 다시 프로세스에게 반환한다. 프로세스는 작업을 처리하기 위해 가상 주소를 CPU에게 전달하며, CPU는 받은 가상주소를 물리주소로 변환하고 데이터를 가져와야 한다. 이때, 특정 데이터가 들어있는 데이터 조각 묶음을 계산하는 알고리즘을 페이징이라고 한다. 각 페이지들의 크기는 같으며, 생성된 순서대로 순번을 차례대로 부여받는다. 페이지 테이블(Page Table) 페이지 테이블이란 물리 주소(physical address)의 페이지를 실제 물리 주소 정보와 매핑한 표를 담고 있는 테이블이다..
가상 메모리 등장 배경 컴퓨터는 프로세스 1개 또는 여러 개의 프로세스를 처리할 수 있다. 그리고 프로세스는 생성되면 작업을 처리하기 위해 메모리를 할당 받아야 한다. 우리의 컴퓨터는 여러 프로세스들을 처리할 수 있어야하는데, 작업을 처리하기 위해 존재하는 컴퓨터의 실제 메모리 자원은 한정적이다. 즉, 컴퓨터의 실제 메모리 공간보다 프로세스가 처리해야할 메모리 공간이 더 많을 수 있다는 말이다. 그렇다면 여러 개의 프로세스를 처리하거나, 메모리가 큰 프로세스를 처리해야할 때는 실행하지 못하는 걸까? 이 부분을 해결하기 위해 가상 메모리가 등장하게 되었다. 가상 메모리는 물리 메모리보다 큰 프로세스나 여러 개의 프로세스들을 동시에 실행시킬 수 있도록, 컴퓨터의 메모리가 무한하다고 느끼게하는 방법이다. 컴퓨..
스레드(Thread) 운영체제에서 스레드는 프로세스 내부에서 실행되는 작은 작업 단위이다. 스레드는 프로세스의 실행 흐름을 구성하는 단위로, 하나의 프로세스는 내부에 여러개의 스레드가 포함될 수 있다. 스레드를 설명하기 전에 프로세스와의 차이점을 알기위해, 프로세스에 대해서 간략하게 설명한다. 프로세스는 독립된 객체로서 생성되면 각각의 메모리 자원을 할당 받고, 서로에게 접근이 불가능하다. 프로세스 특성상 서로에게 접근이 불가능하기에, 여러개의 프로세스를 처리하기 위해서 서로의 상태 자원을 공유하려면 IPC라는 커뮤니케이션 기법이 필요하다. IPC는 커널의 공유 메모리를 활용하여 프로세스들간의 데이터 상태 정보를 주고 받는다. 스레드의 특징 특징 ① 프로세스들이 서로의 데이터에 접근하는것이 직접적으로 불..
멀티 태스킹, 멀티 프로그래밍, 멀티 프로세싱은 컴퓨터 시스템의 성능과 효율성을 향상시키는 데 중요한 역할을 한다. 여러 작업을 동시에 처리할 수 있고, 자원을 효율적으로 활용할 수 있어 작업을 빠르게 처리할 수 있다. 하지만, 이 3가지 개념이 너무나 헷갈리기에 정리하는 글을 써본다. 멀티 태스킹(Multi Tasking) 멀티 태스킹은 하나의 CPU에서 여러 작업(Task)을 동시에 실행되는 것을 의미한다. 지금은 아니지만 옛날에는 컴퓨터에 CPU가 1개 있었고, CPU 안에는 연산하는 시스템이 1개여서 특정 시간에 특정 작업 1개만 실행시킬 수 있었다. 만약 프로그램1을 실행시키면 프로그램1의 작업이 종료될 때까지 프로그램2는 실행시키지 못하고 계속 대기해야하는 것이다. 이 점을 보완하고자 하는 방..
프로세스간 커뮤니케이션을 해야하는 이유 프로세스들은 각각 개별적으로 분리되어 생성되며 프로세스들끼리는 서로에게 접근할 수 없다. 즉, 프로세스는 완전히 독립된 객체이며, 서로에게 접근하지 못하니 영향도 끼치지 않는다. 하지만 여러개의 프로세스를 실행하기 위해선 각 프로세스들이 서로 상태값이나 데이터를 주고받을 일이 생긴다. 예를 들어보자. 프로세스1과 프로세스2가 실행 중이다. 프로세스1과 프로세스2는 덧셈 작업을 수행하며, 프로세스1과 프로세스2의 목표는 하나의 파일에 덧셈 작업을 번갈아 수행해야 한다. 이때, 프로세스1은 1부터 1000까지 덧셈한 다음에 파일에 기록하고, 프로세스2는 1000부터 2000까지 덧셈한 다음에 파일에 기록해야 한다. 두 프로세스들은 모두 파일에 접근할 수 있지만, 서로 ..
컨텍스트 스위칭(Context Switching) 컨텍스트 스위칭(Context Switching)은 운영체제가 현재 실행 중인 프로세스와 다음으로 실행할 프로세스 사이의 교체를 의미한다. 즉, 한 프로세스가 실행 중인 상태에서 다른 프로세스로 교체하기 위해 현재 프로세스의 상태 정보를 저장하고, 다음 프로세스의 상태 정보를 읽어오는 작업을 수행하는 것이다. 컴퓨터를 하다보면 여러개의 프로그램을 띄워 놓고 작업을 해본적이 있을 것이다. 예를 들면, 한글을 띄워놓고 타이핑을 하다가도 코드를 컴파일 하고, 구글에 검색을 하고 등등.. 여러가지 프로그램을 실행중인 상태에서 하나씩 작업을 할 때, 우리는 각 프로그램에서 작업했던 부분들을 그대로 유지한채 이어서 작업을 진행해 나갈 수 있다. 컨텍스트 스위칭은 이..
프로세스(Process) 프로세스는 실행 중인 프로그램을 의미한다. 프로세스는 운영체제에 의해 관리되며, 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 운영체제는 프로세스들에게 적절히 자원들을 분배하여 여러가지 작업을 수행할 수 있게 한다. 프로세스에 대해서 예를 들어보자. 본인은 엑셀 프로그램(excel.exe)을 켰다. 이때 엑셀을 실행시키기 위해 컴퓨터는 엑셀 프로그램을 읽어야 한다. 컴퓨터에서 모든 프로그램은 코드로 작성되어 있다. 이 코드 파일을 컴퓨터가 읽으려면 CPU가 이해할 수 있는 형태인 저급 언어(0과 1로 이루어진 기계어)로 프로그램이 만들어져야 한다. 0과 1로 작성된 실행 프로그램을 코드 이미지 또는 바이너리라고 부르며, 보통 exe란 확장자가 붙는다. 이 exe 프로그..
CPU(Central Processing Unit)는 컴퓨터의 핵심적인 처리 장치로, 명령어를 실행하고 데이터를 처리하는 역할을 담당한다. CPU는 프로세서 내부에 다양한 하드웨어 구성 요소와 기능을 포함하고 있다. 그리고 운영체제는 CPU와 하드웨어들의 자원을 효율적으로 관리해서 응용 프로그램이 원활하게 동작되도록 한다. 운영체제는 프로세스들을 처리하기 위해 CPU의 기능과 시스템 자원에 접근할 수 있어야 한다. 하지만 컴퓨터의 주요한 자원에 무분별하게 접근할 수 있는 것은 아니다. 운영체제는 접근할 수 있는 권한이 부여된 요청만 CPU에 접근을 허락한다. 이 권한은 4가지로 분류되며, 접근 권한들을 분류하여 나눈 것을 CPU Protection Ring이라고 한다. CPU Protection Ring..