[OS] 프로그램

프로그램

기본적으로 개발자들이 짠 코드들을 바탕으로 프로그램이 만들어집니다.

개발자들이 짠 코드의 집합이 컴퓨터가 이해할 수 있는 코드들로 컴파일된 것을 프로그램이라고 합니다.

그리고 프로그램을 실행 하게 됐을 때를 프로세스 라고 하는데요. 이에 대해 알아보겠습니다.

1. 프로세스

프로세스 는 실행되고 있는 프로그램을 뜻합니다.

우리가 프로그램(카톡, 엑셀, 브라우저 등) 을 실행하면 메모리 위에 올라가게 되고, 이를 운영체제가 중재하는 역할을 합니다.

프로세스

실제로 프로그램 자체는 코드(명령어)로 구성되어 있습니다. 그리고 코드를 바탕으로 해서 프로그램을 실행시킨다는 것은 프로세스가 생성되는 것을 의미합니다.

그 프로세스는 프로그램 실행 정보, 프로그래머가 짠 코드 그리고 실행되면서 쓰이는 데이터들로 구성되어 있습니다.

Operation System

[심화]

저는 지금 노트북 키보드를 통해 글을 쓰고 있습니다. 현재 제 노트북에 브라우저, 메신저, 음악 앱 등의 많은 프로그램이 실행되고 있는데요, 그럼에도 바로 키보드 입력이 되는 이유는 바로 인터럽트 라는 것 덕분입니다.

운영체제는 프로세스들을 관리하면서 이렇게 갑작스런 입출력 장치의 신호나 예외상황을 자주 겪게 됩니다. 이 때 실행되고 있는 CPU 자원을 잠시 가져와서 갑작스러운 신호들을 먼저 처리하게 됩니다. 이 때 CPU가 작업중인 프로세스는 대기 상태로 있게 되는 거죠. 하지만 이 순간이 매우 빠르기 때문에, 우리의 프로그램이 멈춘다는 느낌을 받지는 않는 거죠.

2. 프로그래밍 언어

프로그래밍 언어

프로그램은 사람이 프로그래밍 언어를 사용해서 만들게 됩니다.

프로그래밍 절차

CPU는 0, 1만 읽을 수 있습니다. 우리가 영어로 짠 코드를 읽을 수 없죠. 그래서 이를 변환해주는 컴파일 과정이 필요합니다. 결국 개발자들이 짠 코드는 컴파일을 통해 컴퓨터가 실행 가능한 코드들로 변환됩니다.

그리고 컴파일을 위해선 컴파일러 가 필요합니다. 컴파일러는 운영체제와 같이 중요한 시스템 프로그램 중 하나입니다.

보통 우리가 쓰는 프로그래밍 언어는 전부 고급언어 입니다. 그리고 컴파일러를 통해 저급언어 (기계어) 로 변환됩니다.

고급언어&저급언어

반드시 컴파일된 결과물이 [기계어 or 어셈블리어] 인것은 아닙니다. 대표적으로 바이트코드 라는 것이 있습니다.

컴파일된 결과물이 컴퓨터 하드웨어(CPU)에 해석되는 게 아니라 컴퓨터 소프트웨어에서 해석되는 경우죠.
대표적으로 Java, Python 이 그렇습니다.

[용어 정리]