TIL 220905

강지훈·2022년 9월 5일
0

[프로그램과 프로세스 그리고 스레드의 차이]
프로세스(process)는 컴퓨터에서 실행되고 있는 프로그램을 말하여 CPU
스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰입니다.
(싱글 스레드 프로세스: 하나의 스레드만 가지고 있는, 멀티스레드 프로세스: 여러 개의 스레드를 가지고 있는 프로세스)
스레드는 프로세스 내 작업의 흐름을 지칭합니다. (실행 가능한 가장 작은 단위입니다)
프로세스는 코드, 데이터, 스택, 힙 메모리 영역을 기반으로 작업을 하는 반면 스레드는 프로세스 내의 스택 메모리 영역을 제외한 다른 메모리 영역을 프로세스 내 다른 스레드들과 공유합니다.

프로세스가 다른 프로세스와 통신을 하기 위해서는 IPC를 사용해야 하지만 스레드는 메모리를 공유하기 때문에 다른 스레드와의 정보공유가 쉬운 점이 있습니다. 그러나 스레드의 경우 동기화 문제 등의 단점도 있습니다.

예를 들어 웹 요청을 처리할때 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하며, 한 스레드가 중단 되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능합니다. 또한 동시성에도 큰 장점이 있습니다.

하지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어져 있는 프로세스에 영향을 줄 수 있는 단점이 있습니다.

  • 동시성: 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것 처럼 보여주는것

프로세스와 컴파일 과정
프로세스는 프로그램으로부터 인스턴스화 된것을 말합니다. 예를 들어 프로그램은 구글크롬 프로그램과 같은 실행 파일이며, 이를 두번 클릭하면 구글 크롬 '프로세스'가 시작되는 것입니다.

프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미하며 '컴파일 과정'이란 다음과 같습니다. 참고로 여기서 말하는 프로그램이란 C언어 기반의 프로그램을 의미하며, 이는 별도의 컴파일 과정없이 한 번에 한 줄 씩 읽어들여서 실행하는 프로그램인 인터프리터 언어(파이썬 등)로 된 프로그램과는 다릅니다.

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

컴파일러
오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환합니다.

어셈블러
어셈블리어는 목적 코드로 변환됩니다.
이때 확장자는 운영체제마다 다른데 리눅스에서는 .0입니다
예를 들어 가영.c 라는 파일을 만들었을때 가영.0라는 파일이 만들어지게 됩니다.

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

정적라이브러리와 동적라이브러리
라이브러리는 정적 라이브러리와 동적 라이브러리로 나뉩니다.
정적 라이브러리는 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식이며,
시스템 환경 등 외부 의존도가 낮고 코드 중복 등 메모리 효율성이 떨어지는 단점이 있습니다.

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

[유선LAN의 기술: 전이중화 통신, CSMA/CD]
유선 LAN을 이루는 이더넷은 IEEE802.3이라는 프로토콜을 따르며 전이중화 통신을 씁니다.

전이중화 통신
전이중화(full duplex) 통신은 양쪽 장치가 동시에 송수신할 수 있는 방식을 말합니다. 이는 송신로와 수신로로 나눠서 데이터를 주고받으며 현대의 고속 이더넷은 이 방식을 기반으로 통신하고 있습니다.

IEEE 802.3은 연결된 이더넷에서 물리 계층, 데이터 링크 계층의 매체 접근 제어를 정의하는 워킹 그룹이 제작한 워킹 그룹이자 IEEE 표준 집합이다. 이 표준은 광역 통신망 기술에도 활용되지만 일반적으로 근거리 통신망 기술이다. 물리 연결은 동축케이블과 광케이블 등 다양한 형태의 케이블을 통해 노드와 인프라스트럭쳐 장치(허브, 스위치,라우터)사이에서 이루어진다.

CSMA/CD
참고로 이전에는 유선 LAN에 '반이중화 통신' 중 하나인 CSMA/CD 방식을 썻습니다. 이 방식은 데이터를 '보낸 이후' 충돌이 발생한다면 일정 시간 이후 재전송하는 방식을 말합니다. 이는 수신로와 송신로를 각각 둔 것이 아니고 한 경로를 기반으로 데이터를 보내기 때문에 데이터를 보낼 때 충졸에 대해 대비해야 했기 때문입니다.

profile
never stop

0개의 댓글