컴퓨터 구조 + 운영체제 19

페이지 교체와 프레임 할당

가상 메모리를 통해 작은 물리 메모리보다 큰 프로세스도 실행할 수 있다고는 하지만, 그럼에도 불구하고 여전히 물리 메모리의 크기는 한정되어 있다. 운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 기존 메모리에 적재된 불필요한 페이지를 선별하여 보조기억장치로 내보낼 수 있어야 하고, 프로세스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 해야한다. 이번 게시글에서는 요구 페이징의 개념과 페이지 교체 알고리즘, 그리고 프레임 할당에 대해 학습하며 운영체제가 이러한 기능을 어떻게 수행하는 알아보자. 요구 페이징 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법을 요구 페이징이라고 한다. 이름 그대로 실행에 요구되는 페이..

가상 메모리 - 연속 메모리 할당

연속 메모리 할당 프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라고 한다. 프로세스들을 메모리에 연속적으로 할당할 때 무엇을 고려해야 하는지, 그리고 어떤 잠재적인 문제가 있는지 알아보자. 스와핑 메모리에 적재된 프로세스들 중에는 현재 실행디지 않는 프로세스가 있을 수 있다. 입출력 작업의 요구로 대기 상태가 된 프로세스라던지, 오랫동인 사용되지 않은 프로세스가 이런 프로세스들에 속한다. 이러한 프로세스들을 임시로 보조기억장치 일부 영역으로 쫒아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 도 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다. 이때 프로세스들이 쫒겨나는 보조기억장치의 일부 영역을 스왑 영역이라고 한다. 그리고 현재 실행되지 않는 프로세스가 메모리에서..

주소 바인딩

주소 바인딩이란? 프로세스는 실행을 위해 메모리에 적재되면 프로세스를 위한 독자적인 주소공간이 생긴다.이 주소를 논리적 주소라고 한다. 논리적 주소는 각 프로세스마다 독립적으로 할당된다. 그렇다면 프로세스는 왜 논리적 주소를 사용할까? CPU가 프로세스의 작업을 수행하기 위해서 프로세스의 논리적 주소를 참조하게 된다.논리적 주소만으로는 실제 메모리의 주소를 알 수 없기 때문에논리 주소를 물리적 메모리로 연결시키는 작업이 필요하다.이 작업을 주소 바인딩이라고 한다. 주소 바인딩의 종류로는컴파일 타임 바인딩로드 타임 바인딩실행 시간 바인딩이렇게 세 가지의 바인딩 방식이 있다.세 바인딩의 기준은 물리적 주소가 언제 결정되느냐에 따라 결정된다.  컴파일 타임 바..

코어와 멀티코어, 스레드와 멀티스레드

코어와 멀티코어 클럭 속도를 높이는 방법 외에 CPU의 성능을 높이는 방법으로 대표적인 해결책으로는 CPU의 코어와 스레드 수를 늘리는 방법이 있다. 전통적인 CPU에는 코어가 하나였지만, 오늘날에는 코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서라고 부른다. 이는 CPU 내에 명령어를 처리하는 일꾼이 여러 명 있는 것과 같다. 당연히 멀티코어의 처리 속도는 단일코어보다 빠르며, 가령 클럭 속도가 2.4GHz인 단일 코어 CPU와 클럭 속도가 1.9GHz인 멀티코어 CPU를 비교하면 일반적으로 후자의 성능이 더 좋다. CPU 종류는 CPU 안에 코어가 몇 개 포함되어 있는지에 따라 싱글코어, 듀얼코어, 트리플코어 드응로 나뉜다. 즉 멀티코어 프로세서란 여러 개의 코어를 포함..

프로그래밍 개발 과정

프로그래밍 언어 고수준 VS 저수준 (어셈, 기계어) 컴파일러 - 고수준 언어를 저수준 언어로 번역하는 프로그램이며 이 작업을 컴파일이라 한다. 인터프리터 - 고급언어로 작성된 코드를 한 단계 식 해석하여 실행 시키는 방법이다. 컴파일 언어 - 원시코드를 목적코드 (기계어) 로 변환하는 것 - 네이티브 코드란? 직접 기계어 번역 및 실행됨 중간 언어 - 원시 코드와 목적 코드의 중간 단꼐 언어 (원시 > 중간 > 목적) - Java 가상 머신, .Net PrameWork 등 - 런타임에 동적으로 기계어 번역이 실행된다. - 매니지드 코드 : 바이트 코드 번역 링커 - 컴파일러가 만들어낸 1개 이상의 목적코드들을 병합하여 단일 실행파일로 만들어 내는 프로그램이다. 라이브러리 - 다른 프로그램들과 링크되기 ..

컴퓨터 구조

컴퓨터 구조 1. CPU 2. 레지스터 3. 캐시 4. BUS 5. GPU 1. CPU 중앙처리 장치 (CPU : Central Processing Unit) 컴퓨터 시스템의 기능에는 입력, 출력, 기억, 연산, 제어의 5대 기능이 있다. 이 중에서 연산, 제어 및 기억 기능은 컴퓨터의 중심이 되는 기능이라고 볼 수 있는데 이러한 기능을 수행하는 장치로 컴퓨터의 두뇌로서의 역할을 수행한다고 볼 수 있기 때문에 중앙처리장치 즉, CPU라고 한다. 코어( 개수가 많을수록 여러 가지 작업을 동시에 수행할 수 있다.) 싱글 > 듀얼 > 쿼드 > 핵사 > 옥타 (8개) CPU는 기계어로 쓰인 컴퓨터 프로그램의 명령어를 해석하여 실행한다. CPU는 프로그램에 따라 외부에서 정보를 입력받아, 이를 기억하고, 연산하며..

레지스터

레지스터의 종류 레지스터는 저마다의 역할이 있고, 그에 걸맞는 내용을 저장한다. 그 중 전공서적에서 주로 다루는 8개의 핵심 레지스터를 설명하겠다. 각 레지스터가 CPU내부에서 어떤 역할을 수행하는지에 유의하자. 프로그램 카운터 PC : Program Counter 프로그램 카운터(PC; Progream Counter)는 메모리에서 가저올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다. 프로그램 카운터를 명령어 포인터(IP; Instruction Pointer)라고 부르는 CPU도 있다. 명령어 레지스터 IR : Instruction Register 명령어 레지스터(IR; Instruction Register)는 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터..

ALU

필자는 ALU가 무엇인지도 중요하지만, 왜 배워야 하는 것인지도 중요하다고 생각한다. ALU는 CPU에도, GPU에도 있다. 일반적으로 ALU는 코어의 구성 요소 중 하나이다. ALU는 GPU를 더욱 효율적으로 사용하기 위해 단순 그래픽 처리 뿐만이 아니라, 병렬처리로 그래픽 처리 + 수학 연산도 가능하다 이러한 것이 가능한 GPU를 GPGPU라고 부른다. 이러한 GPGPU 똑똑한 GPU가 나오면서, C/C++ 언어로 병렬계산에 필요한 기능들을 제공해주는 소프트웨어가 만들어졌다. 이러한 것이 CUDA라는 API이다. 이전에도 DX 혹은 OpenGL이라는 병렬형 그래픽 처리 연산 소프트웨어가 있었지만, 이들은 그래픽 처리에 대한 고급 기술이 필요한 반면, CUDA는 이전 API와 달리 병렬 프로그래밍 전문..

Introduction to Computer Systems - 컴퓨터 시스템 개요

개인용 컴퓨터 개인용 컴퓨터의 등장 ( = PC의 등장)은 새로운 컴퓨터 사용 방식을 의미한다. VLSI 기술의 발전으로 1970년대 초 인텔에 의해 마이크로 프로세서가 등장하고, 이해 따라 컴퓨터가 소형화/저가화되면서 70년대 후반에 개인용 컴퓨터의 등장으로 이어지게 되었다. 개인용 컴퓨터의 등장으로 관련 시장이 급격하게 확대됨에 따라 이에 따른 소프트 웨어 및 하드웨어 관련 사업이 부흥하기 시작하였다. 모바일 컴퓨팅 모바일 컴퓨팅이 가능하기 위해서는 아래 3가지 기반 기술이 필요하다. 고속 네트워크 모바일 컴퓨팅이 가능하기 위한 고속의 네트워크 전송기술 모바일 하드웨어 휴대성을 위한 초소형, 초경량의 하드웨어 제조기술 모바일 소프트웨어 개인별 최적화된 소프트웨어 제작, 유통 기술 개인용, 모바일 모두..