Bin's Blog

오늘의 CS(프로세스와 스레드 - 1편) 본문

CS

오늘의 CS(프로세스와 스레드 - 1편)

hotIce 2023. 9. 14. 10:45
728x90

프로세스(process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링이 대상이 되는 작업이라는 용어와 같은 의미로 쓰인다. 스레드는 프로세스 내 작업의 흐름을 지칭한다. 

 

프로그램과 프로세스

앞의 그림처럼 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행된다. 

 

프로세스와 컴파일 과정

프로세스는 프로그램이 메모리에 올라가 인스턴스화된 것을 말한다. 예를 들어 프로그램은 구글 크롬 프로그램과 같은 실행 파일이며, 이를 두 번 클릭하면 구글 크롬 프로세스로 변환되는 것이다. 

 

프로그램을 만드는 과정은 만드는 언어마다 다를 수 있으며 C 언어 기반의 프로그램을 기준으로 설명하면 컴파일러가 컴파일 과정을 통해 컴퓨터가 이해할 수있는 기계어로 번역하여 실행할 수 있는 파일을 만들게 된다. 참고로 컴파일 과정은 다음과 같다. 

 

프로그램의 컴파일 과정

전처리

소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환한다.

 

컴파일러

오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다.

 

어셈블러

어셈블리어는 목적 코드(object code)로 변환된다. 이때 확장자는 운영체제마다 다른데 리눅스에서는 .o이다. 예를 들어 철수.c라는 파일을 만들었을 때 철수.o라는 파일이 만들어지게 된다. 

 

링커

프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행 파일을 만든다. 실행 파일의 확장자는 .exe 또는 .out이라는 확장자를 갖는다. 

 

정적 라이브러리와 동적 라이브러리

라이브러리는 정적 라이브러리와 동적 라이브러리로 나뉜다. 

 

정적 라이브러리는 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식으로 라이브러리를 쓰는 방법이다. 

시스템 환경 등 외부 의존도가 낮은 장점이 있지만 코드 중복 등 메모리 효율성이 떨어진다는 단점이 있다. 

 

동적 라이브러리는 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조하여 라이브러리를 쓰는 방법이다. 메모리 효율성에서의 장점을 지니지만 외부 의존도가 높아진다는 단점이 있다. 

 

📚용어 정리

1️⃣ 매크로: 정해진 순서에 따라 어떻게 특정 입력 시퀀스(문자열을 가리키기도 한다)가 출력 시퀀스로 매핑되어야 하는지를 정의하는 규칙이나 패턴

 

2️⃣ DLL(Dynamic Link Library): DLL은 동적 링크라고 하며 실행 파일에서 해당 라이브러리의 기능을 사용 시에만, 라이브러리 파일을 참조하여(혹은 다운로드 받아) 기능을 호출한다. 정적 링크와는 다르게 컴파일 시점에서 실행 파일에 함수를 복사하지 않고, 함수의 위치정보만 갖고 그 함수를 호출할 수 있게 한다.  

 

728x90