iot

면접 준비로 공부했던 것들(2)

030binfolder 2024. 8. 1. 16:54

https://littlebinsuishere.tistory.com/m/14

 

면접 준비로 공부했던 것들(1)

필자: 전자전기공학부 4학년 졸업 예정, 올해 7월 말 취직 여름 휴가를 맞이하여(회사 1주일 다님)면접 준비로 공부했던 것들을 간단히 정리해보는 시간을 가져보겠습니다. . . !부족한 것들은 차

littlebinsuishere.tistory.com

 

1편에서 이어집니다. (TMI: 표지 이미지는 옛날에 했던 드래곤빌리지 어쩌구,,,에서 만든 마을)

 

 

 

4.  프로세스(process), 스레드(thread), 프로그램 카운터(pc)

 

하드디스크(ROM)에 저장되어 있는 정적인 상태의 프로그램을 꺼내와서, RAM에 적재(프로그램 로딩)되는 과정을 프로그램이 실행되었다고 한다. 프로그램 자체의 코드 + 프로그램 정보를 가져와서 RAM에 적재되어 있는 상태를 프로세스라고 한다.

 

프로세스 안 함수(예들 들어 main 함수)를 프로세스 안의 PC(Program Counter)가 가리켜 코드가 실행되면, 스레드(thread)가 생기고  main 함수가 실행된다.

 

* 프로세스와 스레드는 독립적인 흐름을 가지고 있고, 각각 PC를 따로 가지고 있다.

 

 

 

 

5.  프로그램 빌드 과정

 

Build: 소스 코드 파일을 실행 가능한 소프트웨어 결과물로 만드는 과정으로, 전처리->컴파일->어셈블->링크의 과정을 거쳐 실행 가능한 exe 파일을 만들어내는 과정이다.

 

1. 전처리(preprocess)

 

소스코드의 main 함수를 실행하기 전 준비 과정으로 #define, #include를 처리해준다.

 

2. 컴파일(Compile) - 컴파일러(ex. gcc, g++, Visual C++)

 

고수준 언어로 쓰여진 소스 코드를 저수준 언어인 어셈블리어로 번역해주는 과정.

 

3. 어셈블(Assemble)

 

어셈블리어를 기계어로 번역해주는 과정. 어셈블 후 object 파일(.o)이 생긴다. 연관된 파일 각각이 번역되어 최종 실행 파일의 일부가 되기 때문에 object라고 이해하면 될 거 같다.

 

4. 링크(Link)

 

Object 파일들과 필요 라이브러리들을 연결해 하나의 실행가능 파일(.exe)로 만들어주는 과정.

 

 

6.  메모리 구조(stack, heap), 전역 변수 / 지역 변수, extern(전역 변수 선언)

 

* 메모리(RAM) 구조

code(text)
R/O(data) - const 변수(상수, 프로그램 off 후 사라짐)
R/W(data) - 전역 변수
heap - malloc 동적 할당/ 런타임(사용자가 동적할당하기 때문) / 동적 할당 data - 객체, 배열, ... 
stack - 지역 변수(함수 실행 후 사라짐) / 컴파일 / 지역적 data - 함수, 지역 변수, 매개 변수 / stack pointer, LIFO, push/pop

 

전역 변수 지역 변수
다른 파일, 함수에서 접근 가능 해당 함수 내에서만 쓸 수 있다

 

 

* 다른 파일의 전역 변수를 사용할 때, extern을 사용하여 변수를 선언해준다.

 

ex) file_a.c의 int a = 0;을 file_b.c에서 사용하려고 할 때 extern int a;로 선언해 사용한다.

근데 이러면 파일마다 선언해줘야 하는 번거로움이 있으므로 헤더파일 head.h에 extern int a;로 선언해주고, 해당 코드파일 file_b.c에 헤더파일 head.h을 include 하는 방식으로 사용한다.

 

* #define 처리(매크로 상수, 매크로 함수)를 하면 컴파일 과정 시 text 형식으로 처리해 코드 실행 시 치환되어 code 영역에 들어간다. 이는 변수를 위한 메모리 할당을 해주지 않아도 되기 때문에 메모리 용량 관리에 큰 도움을 준다.

 

 

 

3편으로 이어집니다!