본문 바로가기

데이터

메모리 계층(Memory Hierarchy) 메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등 메모리 계층 구조(Memory Hierarchy) : 메모리들은 프로그램이 실행하는 동안 데이터의 입력 및 출력을 담당한다. 메모리들의 차이는 CPU 와의 거리에서 온다. CPU와의 거리가 가까울수록 빠르고 용량이 작으며 멀수록 느리고 용량이 크다.(기술과 돈의 문제) 하드디스크에 있는 내용은 프로그램의 실행을 위해 메인 메모리로 이동한다. 메인 메모리에 있는 일부 데이터도 실행을 위해 L2 캐.. 더보기
MMF(Memory Mapped File) 개념 : File 을 Memory 에 Mapping(연결) 가상 메모리 중 파일에 연결되어 있는 영역에 데이터를 저장한다. 이렇게 메모리에 저장된 데이터는 실제 파일에도 영향을 미친다. 즉, 데이터가 메모리뿐만 아니라 메모리에 연결된 파일에도 저장되는 것이다. 장점 : 1. 프로그래밍 편리 : 메모리상에 저장된 데이터를 조작하는 방식으로 파일 내 데이터를 조작할 수 있다. 2. 성능 향상 : 메모리는 중간에서 파일과 데이터의 캐쉬 역할을 하여 성능을 향상시킨다. MMF 구현 : 1. 파일 개방 : CreateFile() 2. 파일 연결 오브젝트 생성 : CreateFileMapping() HANDLE CreateFileMapping( HANDLE hFile, // 메모리에 연결할 파일의 핸들 LPSECU.. 더보기
라이브러리(Library) 라이브러리(Library) : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일을 의미한다. (참고 : 즉, 함수와 데이터들의 정의가 컴파일된 바이너리 코드로 라이브러리에 존재한다) (ex. C Run - Time Library Characteristics Libcmt.lib Multithreaded, static link Libcmtd.lib Multithreaded, static link (debug) Msvcrt.lib Multithreaded, dynamic link Msvcrtd.lib Multithreaded, dynamic link (debug)---d.lib : 디버그 모드로 컴파일) Static Library : 정적 라이브러리 개념 : 헤더파.. 더보기
비동기 I/O 와 APC 개념 : 동기 I/O : I/O 작업의 수행을 위해 호출된 함수가 블로킹 상태에 놓이기 때문에 CPU는 블로킹 상태에서 반환될 때까지 일을 하지못한다. 비동기 I/O : I/O 작업의 수행을 위해 함수를 호출하자마자 반환한다. 따라서 CPU는 그다음 작업을 진행한다. 중첩(Overlapped) I/O : 넌블로킹(Non-Blocking) 함수를 이용하여 여러작업을 동시에 진행한다. 함수가 바로 반환되므로 계속 중첩해서 I/O 요청을 할수가 있다. (참고 : 동기 방식(블로킹) I/O 에서는 전송을 위해 할당된 내부 메모리 버퍼에 데이터가 복사가 되면 함수가 반환된다. (데이터 전송이 완료될 때 반환되는 것이 아니다) OVERAPPED 구조체 typedef struct _OVERLAPPED { ULONG_.. 더보기
리소스(Resource) 리소스(Resouce) : 코드의 논리와 무관한 데이터 메뉴, 비트맵, 액셀러레이터, 문자열, 아이콘, 커서 등이 속한다. 1. 리소스의 분리 : 프로그램은 코드와 데이터로 구성된다. 데이터는 프로그램의 처리 대상이며 코드는 데이터를 처리하는 수단이다. 도스 프로그래밍과 달리 윈도우즈 프로그래밍에서는 이러한 데이터를 만들고 관리하는 것이 별도의 작업으로 분리되어 있다. 이 데이터들 중에 코드와 무관한 것들을 리소스(Resource)라 하며 별도의 편집기로 만들어져 컴파일되며 링크시에 실행파일에 결합된다. 윈도우즈 프로그래밍에서 리소스와 코드가 분리되어 있어 다음과 같은 장점이 있다. 1. 디자이너와 프로그래머가 분담하여 작업을 하기가 편하다. 2. 리소스를 수정하더라도 리소스만 컴파일 하면 되므로 컴파일.. 더보기