본문 바로가기

Programming/Basis

(21)
OS의 의의 1. OS의 기능 OS가 없던 초기의 컴퓨터에서 프로그램을 만들려면, 아무 프로그램도 없는 상태에서 프로그래머가 모든 기능을 처리하는 프로그램을 처음부터 끝까지 작성해야 했다. 기계어로 프로그램을 작성한 후 스위치라는 것을 사용해 완성된 코드를 입력해야 했는데, 이는 상당히 까다로운 작업이었다. 그래서 프로그램을 적재(load)하고 실행하는 기능만 갖춘 모니터 프로그램이라는 것이 개발되었다. 미리 모니터 프로그램을 실행시켜 둔 후, 여러가지 프로그램을 메모리에 적재해 실행할 수 있게 되어, 이제 프로그래머는 모든 기능을 처리할 필요는 없어졌다. 그런데 사실 많은 프로그램이 갖는 공통점이 있다. 키보드로부터 데이터를 입력받고, 모니터로 데이터를 출력하는 것이 대표적인 예다. 최종적으로 완성되는 프로그램을 ..
EXE 파일의 실행 1. EXE 파일의 실행 EXE 파일은 일반적으로 하드디스크에 기록된 하나의 파일이다. EXE 파일을 더블 클릭하면 이 파일의 내용이 메모리에 적재(load)되어 실행되는 것이다. 네이티브 코드에서의 변수 참조는 데이터가 저장된 메모리 주소를 참조하는 명령어를 실행함으로써 이루어진다. 그리고 함수 호출은 프로그램의 흐름을 함수가 저장된 위치의 시작주소로 바꿈으로써 이루어진다. EXE 파일은 프로그램으로서 네이티브 코드의 완성된 형태지만 변수나 함수의 메모리 상의 물리적 위치까지 결정하는 것은 아니다. 윈도우와 같이 멀티 태스킹이 가능한 환경에서는 프로그램의 변수나 함수가 저장된 위치가 실행할 때마다 바뀐다. 그렇다면 변수와 함수의 주소는 어떻게 결정되는 걸까? EXE 파일에는 변수와 함수의 임시 메모리 ..
EXE 파일의 생성 1. 컴퓨터는 네이티브 코드만 실행할 수 있다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include int add(int a, int b); int main() { int a = 5, b = 9; char buffer[20]; char title[] = "Add"; sprintf_s(buffer, sizeof buffer, "%d + %d = %d", a, b, add(a, b)); MessageBox(NULL, buffer, title, MB_OK); return 0; } int add(int a, int b) { return (a + b); } Colored by Color Scripter cs 위와 같이 특정 프로그래밍..
부트 스트랩 프로그램의 작동 환경에는 보통 OS와 HW 외에 BIOS(Basic Input/Output System)라는 것이 포함된다. BIOS는 ⒜ROM 등에 기록되어 컴퓨터 본체에 내장되는 프로그램이다. 이는 키보드, 디스크 등을 제어하는 기능과 부트스트랩 로더(bootstrap loader)라는 기능을 갖는다. 부트스트랩 로더는 ⒝부트 드라이브의 앞 부분에 기억되는 작은 프로그램이다. 컴퓨터의 전원을 연결하면 CPU와 메모리, 디스크 등을 간단히 진단한 후 부트스트랩 로더가 실행된다. 주요 기능은 하드 디스크 등에 기록된 OS를 메모리에 적재(load)한 후 실행하는 것이다. 물론 애플리케이션을 실행시키는 것은 OS의 역할이지만 OS가 자신을 실행시킬 수는 없으니, OS는 부트스트랩 로더에 의해 실행된다. 참..
프로그램의 이식 1. 에뮬레이터 ⒜에뮬레이터를 이용하면 이식(porting) 없이 다른 OS용 프로그램을 사용할 수 있다. 대표적인 예로 ⒝Mac의 Virtual PC for Mac이 있다. 이는 Mac OS에서 윈도우용 애플리케이션을 작동시키는 에뮬레이터다. Virtual PC for Mac은 Mac PC를 IBM 호환 기종인 것처럼 작동시켜 윈도우 설치가 가능하게 한다. 다시 말해 Mac에서 윈도우가 작동시켜, 윈도우용 프로그램이 Mac에서 작동할 수 있게 한다. 윈도우용 애플리케이션은 윈도우의 API를 이용한다. 윈도우는 하드웨어가 IBM PC 호환 기종이라고 가정하고 조작하지만 실제로는 Virtual PC for Mac에 의해 Mac이라는 하드웨어가 작동하는 것이다. 2. Java의 이식성 에뮬레이터는 특정 환경..
Ports CPU가 다르면 네이티브 코드도 달라진다. 그럼 프로그램의 소스 코드를 배포하는 건 어떨까? ⒜FreeBSD에서는 Ports를 이용해 애플리케이션의 소스 코드를 현재 하드웨어에 맞게 컴파일할 수 있다. 따라서 확실히 실행할 수 있는 네이티브 코드를 얻을 수 있게 되는 것이다. 여기서 ports는 컴퓨터에 달린 직렬 또는 병렬포트보다는 한 프로그램을 다른 플랫폼에 이식하는 작업(porting)이라는 의미에 더 가깝다. 필요로 하는 애플리케이션의 소스 코드가 하드 디스크에 없다면 Ports는 자동으로 ⒝FTP를 이용해 인터넷에서 소스 코드를 다운로드하게 되어 있다. FreeBSD용 애플리케이션의 소스 코드를 제공하는 사이트는 전세계 널리 분포되어 있으며, Ports를 통해 자신의 환경에 맞게 컴파일할 수 있..
프로그램의 작동 환경 1. OS와 하드웨어가 프로그램의 작동 환경을 결정한다. LOL(League Of Legends)의 작동 환경(시스템의 요구 사항)은 다음과 같다. OS Windows XP SP3 이상, Windows Vista, Windows 7, Windows 8 또는 Windows 10 정품 CPU CPU 3GHz 램 4GB 하드 12GB 그래픽 GeForce 8800 또는 동급 그래픽 카드 이상(512MB 이상 비디오 메모리, 전용 GPU가 적용된) 여러가지 OS를 설치할 수 있는 하드웨어도 있고 여러 종류의 하드웨어에서 작동하는 OS도 있다.때문에 소프트웨어의 작동 환경에는 OS와 하드웨어가 모두 명시되어 있어야 한다.윈도우처럼 OS에 여러가지 버전이 있을 경우 특정 버전의 OS를 요구하는 경우도 있다. 프로그..
파일 압축 1. 파일은 바이트 단위로 기록된다. ⒜파일에 저장되는 데이터의 단위는 바이트다. 파일 크기를 KB 등의 단위로 나타내는 것도 이 때문이다. 바꿔 말하면 파일은 바이트의 집합체라고 할 수 있다. 1바이트로 표현할 수 있는 데이터는 256가지이며, 2진수로 00000000 ~ 11111111의 범위를 갖는다. 이 데이터가 문자를 나타낸다면 문서 파일이 되고, 그림을 나타낸다면 그림 파일이 되는 것이다. 하지만 파일은 바이트 단위의 데이터가 연속적으로 저장되어 있는 것임은 같다. ⒜파일(file): 디스크 등의 기록 매체에 데이터를 저장한 것 2. 런 렝스 코딩 'AAAAAAAABBBBCCCCCCDDDDD'를 저장한 텍스트 파일이 있다고 하자. 알파벳 하나의 크기는 1바이트이므로 이 파일의 크기는 22바이트..