본문 바로가기

Programming/Basis

(21)
디스크의 구조 디스크는 표면을 몇 개의 영역으로 나누어 사용되며, 나누는 방식에는 섹터 방식과 가변 방식의 두 가지가 있다. 섹터 방식은 고정된 길이의 영역으로 나누는 방식이고, 가변 방식은 일정하지 않은 길이의 영역으로 나누는 방식이다. 일반적인 PC에서는 전자를 채택하고 있으며, 그 구조는 다음과 같다. 여기서 섹터(sector)는 디스크를 물리적으로 읽고 쓰는 최소 단위가 된다. 윈도우에서 사용하는 디스크의 경우 1섹터를 512바이트로 하는 것이 일반적이다. 단, 논리적(소프트웨어적)으로 디스크를 읽고 쓰는 단위는 클러스터(cluster)다. 클러스터는 섹터의 정수배(512B, 1KB, 2KB, 4KB, …)며, 하드디스크의 용량에 비례한다. 바꿔 말하면 아무리 작은 파일이라도 무조건 1 클러스터 이상의 영역을 ..
메모리를 절약하는 방법 1. 가상 메모리만으로는 메모리 문제를 해결할 수 없다 ⒜GUI 기반인 윈도우는 그야말로 거대한 OS다.⒝MS-DOS의 초기 버전의 경우 128KB의 메모리만 있어도 충분했지만,현재의 윈도우는 512MB은 되어야 쾌적하게 사용할 수 있다.하지만 윈도우에 ⒞멀티태스킹 기능이 내장되면서 여러 개의 애플리케이션을 동시에 실행할 수 있게 되었고, 이에 따라 512MB조차 모자란 경우가 많아졌다. 가상 메모리로 이 문제를 어느정도 해결할 수 있지만, 이는 보완책에 불과하다.페이지 인과 페이지 아웃 작업이 시작되면, 디스크에 접근하게 된다. 디스크는 메모리보다 접근 속도가 느리기 때문에, 이는 프로그램 실행 속도 저하를 야기한다.이런 이유로 가상 메모리는 보완책일 뿐, 궁극적인 해결책이라고 할 수는 없는 것이다. ..
가상 메모리 1. 가상 메모리 디스크의 일부를 메모리처럼 사용하는 기술을 말한다. 메모리의 일부를 디스크처럼 사용하는 디스크 캐시가 가상 디스크인 것처럼, 디스크의 일부를 메모리처럼 사용하는 기술은 가상 메모리(Virtual memory)인 것이다. 가상 메모리는 메모리가 부족한 경우에도 크기가 큰 프로그램을 사용할 수 있게 한다. 그러니까 메모리 여유 공간이 5MB여도 10MB짜리 프로그램을 실행할 수 있다는 이야기다. 하지만 실행을 위해서는 실행되는 부분이 메모리 상에 있어야 한다. 그래서 가상 메모리를 구현하려면 ⒜실제 메모리와 가상 메모리의 내용을 서로 바꾸면서 프로그램을 실행해야 한다. 윈도우에서는 가상 메모리를 제공한다. 이는 ⒝OS 차원에서 지원되며, 큰 효과를 보고 있다. 가상 메모리 구현 기법에는 페..
디스크 캐시 1. 디스크 캐시 디스크 ⒜캐시(disk cache)는 디스크로부터 읽은 내용을 일부 보존해두는 메모리 영역을 말한다. 나중에 같은 데이터를 읽어야 할 경우가 생기면 실제 디스크에서 읽는 게 아니라 디스크 캐시에서 빠르게 읽어낼 수 있다. 이는 메모리에서 읽는 속도가 디스크에서 읽는 속도보다 훨씬 빠르기 때문이다. 결론적으로 디스크 캐시에 의해 디스크 접근 속도가 향상된다고 할 수 있다. ⒜ 캐시(cache): 컴퓨터 과학에서 캐시는 데이터나 값을 미리 복사해 놓는 임시 장소를 뜻한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있기 때문에, 시스템의 효율성을 위해 다양한 곳에서 쓰인다. 디스크 캐시를 활용하는 대표적인 OS는 윈도우(Windows)다..
프로그램이 실행되는 순서 1. 내장 프로그래밍 초기에는 프로그램을 작성하는 데에 물리적인 방법이 사용되었다. 프로그램 실행을 위해서는 프로그래머가 ⒜진공관 회로의 연결 구조를 바꿔야 했다. 다시 말해 하드웨어 기능을 프로그래밍했다는 것이다. 이로 인해 회로의 문제가 컴퓨터의 문제로, 프로그래머의 실수가 전체 시스템의 문제로 번졌다. 게다가 회로의 연결 구조를 바꾸는 작업이 만만치 않았다. 하드웨어에 대한 깊은 이해가 필요한 일이니, 사실 당연한 일이다. 이를 위해 내장 프로그램(Stored program)이 고안되었다. 프로그램을 데이터처럼 숫자로 표현하고, 데이터와 같은 형태로 저장 장치에 저장하는 것이다. 현재 C 코드를 컴파일해 숫자로 이루어진 기계어로 변환해 저장하는 것이 이 방식이다. 지금이야 너무나도 당연한 이야기지만..
메모리 1. 하드웨어로 본 메모리 우리가 메모리 공간이라고 부르는 것의 실체는 메모리 IC다. 크게 ⒜RAM과 ⒝ROM으로 나뉘고 RAM은 다시 ⒞SRAM과 ⒟DRAM으로 나뉜다. 여러가지 종류가 있지만 기본적인 구조는 같다. 메모리 IC는 기본적으로 전원, 주소 신호, 데이터 신호, 제어 신호 등을 입출력하기 위한 많은 핀을 갖는다. 여기서는 RAM을 예로 들겠다. ⒜RAM(Random Access Memory): 읽기/쓰기가 모두 가능한 메모리 ⒝ROM(Read Only Memory): 읽기만 가능한 메모리 ⒞SRAM(Static RAM): 내용을 보존하기 위해 리프레시(refresh) 작업이 필요없는 RAM ⒟DRAM(Dynamic RAM): 내용을 보존하기 위해 리프레시(refresh) 작업이 필요한 R..
컴퓨터에서 소수를 표현하는 방법 1. 0.1을 100번 더하면? 다음 코드를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include int main() { float num; int i; for (i = 0; i 1.0110011 ② 소수점 아래를 23비트로 만든다. -> 1.01100110000000000000000 ③ 소수점 아래만 떼어낸다. -> m = 01100110000000000000000 다음은 지수부다. 왜 e 가 아닌 e-127 이고, 하필 127 을 빼주는 걸까? 앞의 그림을 다시 보자. 부호(1비트) 지수(8비트) 가수(23비트) 지수는 8비트다. 따라서 00000000~11111111(255)의 수를 나타낼 수 있다. 그런데 지수부에서는 음수를 표현해야 하는 경우도 생긴다. 이 때 별도의..
비트 연산 1. 시프트 연산 시프트(shift) 연산은 비트 열을 밀어내는 연산을 말한다. 비트 열을 밀어내는 연산이므로 2진수에 대해서만 가능한 연산이다. C언어에서는 > 연산자로 이를 구현하고 있다. 예를 들어 22 > 3은 다음과 같이 연산된다. 이 때 왼쪽의 빈 자리에는 원래 수의 최상위 비트 값이 채워진다. 따라서 부호가 유지된다. 또한 최하위 자리를 넘어간 비트는 버려진다. 따라서 연산의 결과는 다음과 같다. 2. 2의 보수법 컴퓨터에서는 *최상위 비트를 사용해 부호를 나타내는 것이 일반적이다. 이 비트 값이 0이면 양수, 1이면 음수를 나타낸다. -5는 2진수로 어떻게 나타낼까? 단순히 생각하면 5가 2진수로 00000101이니까, -5는 10000101일 것 같지만, 그렇지 않다. 예를 들어, -5를..