NASM 어셈블리 언어

프로그램(program)과 프로세스(process)

3.1) 프로그램(program)과 프로세스(process)

이전 문서에서 컴파일링크 및 빌드에 대한 개념을 정리했다추가로 말하자면 소스를 컴파일 할 때는 바로 기계어 코드로 번역하는 경우도 있고어셈블리 언어로 변환된 다음 이 어셈블리 소스 파일을 기계어로 변역하는 경우도 있다컴파일러가 소스 파일을 어셈블리 언어로 변환한다면생성한 어셈블리 파일을 기계어로 변환하는 도구를 어셈블러(Assembler)라고 한다이후에 빌더는 소스 코드를 받으면 컴파일과 링크 과정을 거쳐 실행 가능한 목적 파일을 내놓는다고 했다이때 빌더가 생성하는이 실행 가능한 목적 파일을 바로 프로그램(program)이라고 한다.

하지만 우리가 빌드를 완료했다고 프로그램이 바로 실행되지는 않는다프로그램은 그것이 어떻게 동작하는지에 대한 정보를 담고 있을 뿐이다프로그램이 실행 가능한 목적 파일인 이유가 여기에 있다프로그램을 실행하면 운영체제는 프로그램에 기록된 실행 정보를 기반으로 해당 프로그램에 대해 메모리를 확보하고곧이어 프로그램의 명령을 메모리에 올린다이때 운영체제가 메모리에 올린 프로그램의 실행 정보를 프로세스(process)라고 한다간단히 말해서프로세스란 실행 중인 프로그램이다.

이전 문서에서 프로그램을 위해 운영체제가 메모리를 확보하고이 메모리를 네 가지의 영역으로 구분할 수 있다고 했다그 때 설명한 내용을 다시 가져와서 이에 대해 간단하게 정리해보자.

코드 세그먼트(code segment)실행할 프로그램의 기계어 명령이 올라오는 메모리 영역이다.

데이터 세그먼트(data segment)정적 변수 및 전역 변수문자열 상수 등 프로그램 실행 시에 정의되고 프로그램이 종료될 때 해제되는 데이터를 저장하는 영역이다.

힙 세그먼트(heap segment)동적 할당한 데이터를 저장하는 영역이다.

스택 세그먼트(stack segment)지역 변수 등 임시적으로 사용되는 데이터를 저장하는 영역이다.

이전 문서를 기억하는 분이라면전에 영역이라고 썼던 부분이 세그먼트라는 단어로 바뀌었음을 알 수 있다세그먼트(segment)란 프로그램의 메모리를 목적에 따라 구분하였을 때 해당 영역을 말한다실제 어셈블리를 사용할 때는 프로그램의 데이터 세그먼트에 대한 정의와 코드 세그먼트에 대한 정의를 별도로 작성해주어야 한다이에 대해서는 다음 절에서 다루겠다.

댓글

댓글 본문
graphittie 자세히 보기