Programming/C++

프로세스

OKOK 2017. 7. 27. 17:54

프로세스?

프로세스와 프로그램의 차이는 명확합니다. 프로그램은 보조 기억 장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음입니다. 이 프로그램의 명령어와 정적 데이터가 메모리에 적재되면 생명이 있는 프로세스가 됩니다. 컴퓨터의 관점에서 여러개의 프로세스가 동시에 실행되는 것은 놀라운 일입니다. 하나의 CPU 프로세서는 한 순간에 하나의 프로세스만 실행 할 수 있기 때문입니다. 프로세스가 동시에 여러개 실행될 수 있는 이유는 운영체제가 엄청나게 빠르게 CPU가 실행할 프로세스를 교체하고 있기 때문입니다. 이 교체가 수십번에서 수천번(초) 일어나기 때문에 사람은 동시에 여러개의 프로세스가 실행되고 있다고 생각하는 것입니다. 운영체제는 사용자에게 이렇게 동시에 여러개의 프로세스가 실행되고 있다는 환상을 줍니다. 개발자는 이런 운영체제 덕분에 프로세스의 교체와 사용할 수 있는 CPU자원에 대해 신경 쓰지 않고 프로그램 개발에 온전히 집중할 수 있습니다. 


실행파일의 생선단계는 이렇습니다. 전처리기에 의한 치환작업, 컴파일러에 의한 번역, 어셈블러에 의한 바이너리 코드 생성, 마지막으로 링커에 의한 연결과 부합입니다. 페치란 메모리상에 존재하는 명령어를 CPU로 가져오는 작업입니다. Decode 란 가져다 놓은 명령어를 CPU가 해석하는 단계입니다. 무슨 일을 하라는 명령어인지 분석하는 단계입니다. Execution 이란 해석된 명령어의 명령대로 CPU가 실행하는 단계입니다.


CPU 를 이루는 주요 구성요소들은 다음과 같습니다. ALU는 Arithmetic Logical Unit 의 약자로,  산술 논리 장치 입니다. 이 ALU는 CPU에서 실제 연산을 담당하는 장소입니다. ALU는 크게 덧셈과 뺄셈 같은 산술연산과 AND, OR같은 논리연산을 합니다. 아주 복잡한 프로그램도 이 두 가지 연산으로 이루어집니다. Control Unit은 CPU가 처리해야 할 명령어들을 해석하고, ALU에게 신호를 보냅니다. 또한 ALU가 아닌 다른 블럭들에게도 신호를 보냅니다. CPU 내부에 존재하는 레지스터들은 CPU 내부에 임시적으로 데이터를 저장하기 위한 조그마한 메모리 공간입니다. 이 레지스터들은 CPU 내부에 존재하는 2진 데이터의 저장을 위한 저장장치입니다. CPU에 따라서 16, 32, 64비트의 저장을 할 수 있는 데이터의 크기로 구성됩니다. CPU에서의 버스는 데이터를 주고 받기 위한 매개체 역할을 합니다. 이 버스의 통신 방법을 이해하고 있는 것이 바로 버스 인터페이스입니다. 이 인터페이스는 연결되는 장치에 따라 컨트롤러 또는 어댑터라고도 불립니다. CPU 내에는 속도가 빠른 장치와 느린 장치가 존재합니다. 타이밍을 제어하는 신호가 필요합니다. 이 작업을 동기화라고 부릅니다. 이 동기화를 위해 클럭 신호가 존재합니다. 시스템 프로그램이란 시스템을 동작시키는 프로그램입니다. window 나 unix 같은 운영체제에서 제공하는 라이브러리르 사용하여 프로그램을 개발하는 개발자들을 시스템 프로그래머라고 부릅니다.


운영체제는 커퓨터를 운용하는 특별한 종류의 프로그램입니다. 이 운영체제는 핵심이라고 할 수 있는 부분이 있는데, 이것은 커널입니다. 커널은 컴퓨터 시스템을 제어하는 일, 그러니 메모리르 관리하고, 디스크에 데이터를 읽고 쓰고, 프로그램을 실행시키고, 네트워크 카트, 사운드 카드, 그래픽 카드 등의 장치를 관리하는 일을 합니다.