본문 바로가기

C

C Programming - 1.4 프로그램의 구동 컴파일, 연결 과정을 통해 생성된 실행 파일은 운영체제의 로더(loader)에 의해서 메모리에 적재된다. 또한 실행 파일에 대해 하나의 프로세스 주소공간을 갖도록 메모리 공간을 잡아준다. 왜나하면 여러 개의 프로그램이 동시에 수행하는 멀티태스킹(multitasking) 운영체제에서는 하나의 실행 프로그램을 하나의 프로세스(process)로 간주해서 관리하기 떄문이다. 이 때 프로세스 주소 공간은 다음과 같이 논리적으로 4개의 영역으로 구분 되는 메모리 영역을 갖는다. 1. 텍스트 세그먼트(text segment) : 프로그램 실행에 필요한 기계 코드가 실제로 저장되는 공간 2. 데이터 세그먼트(data segmant) : 전역변수(global variable)나 정적 변수(static variable)가.. 더보기
C Programming - 1.3 링커 C 프로그램 원시파일(.c로 끝나는 코드 파일)을 컴파일 전에 전처리기에서 헤더 파일의 정보를 추가해주면, 기계어로 번역된 목적파일로 바꾸어준다. 그렇지만 목적 파일에서는 라이브러리 함수 호출들이 필연적으로 포함되어 있기 때문에 컴파일 과정에서 컴파일러가 이러한 라이브러리 함수의 이름을 기억해두면 링커(linker)가 이미 컴파일 되어있는 표준 라이브러리 파일*에서 이름에 해당되는 목적 코드를 찾아 사용자가 작성한 코드와 조합시켜준다. 이러한 과정을 연결(linking)이라고 한다. 링커는 이러한 연결 작업을 독립적으로 컴파일 된 여러 개의 목적 코드를 하나의 프로그램으로 연결 완성하는 기능을 수행한다. * 표준 라이브러리 파일 : 시스템 제공 라이브러리, 상용 라이브러리, 사용자 작성 라이브러리 등이 .. 더보기
C Programming - 1.2 컴파일러 소프트웨어를 작성하기 위해 사용하는 언어를 프로그래밍 언어라고 한다. 프로그래밍 언어는 크게 기계어(machine language), 어셈블리 언어(assembly language), 고급 언어(high-level language)로 구분된다. 기계어는 0과 1을 축약한 16진수로 표현되기 때문에 인간이 알아보기 무척 어려울뿐더러 프로세세의 종류에 따라 코드의 의미가 다르게 해석되기 때문에 호환이 되지 않는다. 어셈블리 언어는 명령어와 심볼을 사용하여 기계어보다는 이해하기가 다소 수월하지만 고급언어에 비할 정도는 아니다. 이러한 언어들은 하드웨어의 동작과 기능에 맞춰 프로그램 코드를 작성해야하는 단점이 있다. 반면에 고급언어로 작성된 프로그램은 인간이 알아보기 친숙하기 때문에 배우기 쉬우며 컴퓨터의 기.. 더보기
C Programming - 1.1 컴퓨터 시스템 구조 일반적인 컴퓨터는 CPU를 중심으로 메모리(RAM/ROM) 비디오카드(VGA), 하드디스크(HDD), 입/출력 장치 등으로 구성 되는데, 이러한 하드웨어 장치를 구동하기 위해서는 소프트웨어가 필요하다. 컴퓨터의 전원이 켜지면 부팅(booting, 컴퓨터의 모든 하드웨어 장치를 제어하고 사용자의 컴퓨터 사용을 돕는 소프트웨어, 즉 운영체제를 메모리에 읽어내는 과정) 과정이 진행되는데 메모리로 읽어들이는 장치 드라이버나 윈도우즈(Windows), 리눅스(Linux)등의 운영체제들까지 모두 C 언어로 개발되었다는 점에서 C 프로그래밍의 의미가 매우 크다고 할 수 있다. 프로그래머가 만든 C 프로그램은 모두 운영체제가 제공하는 API(Application Programming Interface, 사용자가 만든 .. 더보기