본문 바로가기
컴퓨터/시스템프로그램

[시스템프로그램] 1. 프로그램 컴파일시 내부 동작 원리,Conccurency vs parallelism

by IT황구 2021. 2. 17.
728x90
반응형

시간이 없습니다. 이번학기 시작하기전에 하기로 했는데.. 개강 1주도 안남아서 복습하다니.. 전 사람이 아닙니다..

컴퓨터는 C Soruce code를 어떻게 저장할까?

2진수의 8bit로 변환하여 저장함.

 

#include<stdio.h>

int main(void){ printf("Hello world"); }

위의 소스코드를 컴퓨터는 어떻게 저장할까요?

#은 ascii code로 35번입니다. 이걸 2진수 8bit로 변환해서 0010 0011 이런식으로 컴퓨터는 저장을 하게 됩니다.

Text file은 오직 ASCII character로만 이루어져 있습니다.

ASCII character는 8bit 정수로 표현되므로 결국 컴퓨터 내부는 2진수 8bit형태로 저장이 된다고 볼 수 있습니다.

 

 

리눅스에서 C언어를 컴파일할때 내부 4가지 동작.

 

gcc -o "실행파일이름" "소스코드명"

이런식으로 컴파일을 하여 실행을 할 수 있습니다.

이때 내부 동작은 4가지로 일어납니다. 또한 이때 만들어지는 파일들을 직접 확인이 가능합니다.

Pre-processor -> Compiler -> Assembler -> Linker -> 실행파일 생성

1. Pre-Processor( text 파일)

hello.c 가 pre-processor를 지나서 hello.i 라는 파일로 만들어집니다.

Source code에서 preprocessor-directive(#include나 macro등 을 가리킴) 을 제거합니다.

hello.i 에는 저런 매크로들이 제거된 pure-C code만 남게 됩니다.

2. Compiler (text 파일)

hello.i 는 컴파일러를 거쳐 hello.s 라는 텍스트파일로 만들어지게 됩니다.

이 코드는 어셈블리어로 이루어져 있습니다.

gcc "파일명" -S -o "파일명.S" 를 입력하시면 볼 수 있습니다.

hello world의 어셈블리 코드는 이렇게 이루어져 있습니다.

3. Assembler (Binary 파일)

hello.s 코드는 이제 어셈블러를 지나서 binary 코드로 변환되게 됩니다.

여기서 나온 binary code는 Relocatable object programs(이식가능한 프로그램) 이라고 불리는데..

이 이유는 맨 마지막 링커에서 이유를 알게 됩니다.

이때 출력파일은 hello.o 입니다. 이건 기계어코드 file이기 때문에 우리가 직접 눈으로 볼 수없습니다.

disassemble을 해주는 툴을 이용해서 어셈블리어로 바꿔야 볼 수 있습니다.

4. Linker (Binary 파일)

hello.o 파일들이 링커를 통해서 최종적으로 다른 object file들과 합쳐지면서 실행파일 hello 를 만들어내게 됩니다.

이 hello.exe파일은 (Executable object program)으로 binary로 이루어져 있습니다.

일반적으로 hello.c 말고도 hello2.c 등 여러개를 동시에 컴파일해서 하나의 파일로 만들때에 필요한 파일입니다.


우리는 hello.c 를 컴파일하면 hello 실행파일만 나오지만

내부에서는 저런 과정을 통해서 컴파일 및 실행파일 생성이 이루어지고 있었습니다.

실행파일 실행시에 쉘(Shell) 의 역할

cmd 열면 나오는 그 쉘 맞습니다~~

이 깜빡거리는 shell의 역할은 무엇일까요? 여러가지 shell 이 있겠지만, 이 shell은 가장 기본쉘인 bash 쉘 입니다.

1. Shell은 command line을 해석하는 역할을 합니다.

2. 실행 명령어가 내장 shell command 이면 자신이 스스로 실행합니다. (자기가 실행할 수 있다면 직접 실행합니다)

3. 실행할 수 없다면? 실행파일을 찾아서 메모리에 올린 후 실행시킵니다.

4. 프로그램이 꺼질때까지 기다립니다.

5. 다시 프롬프트 창을 띄웁니다.

HW관점에서 Controller와 Adapter의 차이

갑자기 컨트롤러 어댑터는 왜 나오는가 하냐면.. 실행되는걸 하드웨어적 관점으로도 설명해주셨는데.. 스킵하겠습니다

Controller : main PCB 기판 그 자체에 device가 있는 경우를 말합니다.

Adapter : PCB에 있는 슬롯에 꽂는 것을 말합니다.

그래픽카드? 슬롯에 꽂지요?? 어댑터입니다.

네트워크 선? 슬롯에 꽂지요?? 어댑터입니다.

Concurrency and Parallelism

동시성 vs 병렬처리

이게 갑자기 왜 나오냐고요?

1강에서는 전체적 구조를 훑어주는거라 이런 내용이 숨어있네요. 일단 중요한거니까 정리해두겠습니다

1. Concurrency (동시성,병행성)

여러개의 프로세스가 동시에 실행되는것을 말합니다.(실제로 동시사용은 아닙니다)

하나의 CPU로 여러개의 프로세스를 엄청 빠른속도로 번갈아가면서 사용하는 것 입니다.

Using processors alternately

single user가 multiple task를 할 수 있게 해줍니다 concurrently

2. Parallelism

진짜로 이건 CPU가 여러개 입니다.

여러 프로세스들을 위해 멀티 프로세서(다중 코어)를 지원하는것입니다.

여러 사람이서 여러 업무를 처리합니다.

Hyperthreading -> Thread-level parallelism

=> Single CPU가 여러가지 컨트롤 flow를 처리하게 해주는 기술

일반적으로 6코어면 6쓰레드가 맞습니다. 하지만..

제 CPU인데.. 코어는 6갠데 쓰레드가 12개나 됩니다. 어떻게 했을까요?

1개의 코어당 OS가 2개의 가상(논리)코어를 할당해서 서로 업무가 끝날때마다 cpu가 놀지않고 계속 일을 하는것을 말합니다.

For each processor core that is physically present, the operating system addresses two virtual (logical) cores and shares the workload between them when possible. -wikipedia

Instruction level parallelism 처럼 실제로 동시에 여러 업무를 처리하게 됩니다.

하지만 cpu가 남아있는 경우에(when possible) 수행하게 되므로 실제 물리적 2core에 비해서는 성능이 좀 떨어지게 됩니다.

하지만 1코어로 2코어를 비슷하게 성능을 낸다는것 자체가.. (1.4배인가 정도로 알고있습니다)

정말 좋은 기법이지요...

하지만 단점으로는 CPU를 쉬지도 않고 못살게 구니까 전력 사용량의 문제등이 있겠지요?

hyper-threading was criticised for energy inefficiency.[27] For example, specialist low-power CPU design company ARM stated that simultaneous multithreading can use up to 46% more power than ordinary dual-core designs.

일반적인 2코어 디자인보다 46%까지 더 전력사용을 한다고 ARM에게 욕을 먹은적이 있습니다..*아주 옛날이지만

Intel core i7은 4개의 코어가 있고, 각 코어마다 2개의 쓰레드가 있습니다

그래서 실제로는 8개의 쓰레드를 parallel 하게 실행할 수 있습니다.


쓰다가 의문점...

hyperthreading이 스레드레벨 병렬화인데..

1개의 core에서 2개의 thread가 빠른 스위칭을 하는거면

concurrency의 개념이 맞지 않나? -> NO

실제로는 pipelining 처럼 동시에 일을 수행하고 있었다.

CPU의 유휴시간을 적극 활용하여 다른 업무를 탑재해서 동시에 돌려서

여러일을 동시에 처리하는 것이다.

따라서 parallelism이 맞다.

 

blog.naver.com/rbals0445/222246263929

 

[시스템프로그램] 1. 프로그램 컴파일시 내부 동작 원리,Conccurency vs parallelism

시간이 없습니다. 이번학기 시작하기전에 하기로 했는데.. 개강 1주도 안남아서 복습하다니.. 전 사람이 아...

blog.naver.com

=====END======

 

728x90
반응형