막 생각나는 것 위주로 빠르게 적음.
나도 부정확하게 아는게 있을것 같으니 잘못된거 있으면 지적질좀.

[ 컴파일 ]
님이 만든 소스파일(Text)을 컴퓨터가 알아들을 수 있는 이진파일(Binary)로 만드는것.
범용적으로는 님이 만든 소스파일을 실행환경에서 실행할수 있는 구조로 만드는 것.
한번 더 쓴 이유는 과거에는 실행환경이 컴퓨터 였지만, Web 에서는 TypeScript 를
JavaScript 소스로 바꾸는 것도 컴파일이라 말하고, 최신 언어 상당수는 가상머신 위에서
돌아가기 때문에(물론 이는 이진파일인 경우가 많지).


[ 링크 ]
님이 어떤 프로그램을 만들때 이 프로그램이 하나의 이진파일에 모두 들어가는 것이 아님.
여럭가지 목적으로 코드를 분리해서 여러개의 이진파일로 만들어 놓음. 그리고
프로그램 실행파일을 만들시, 혹은 프로그램 실행시, 혹은 프로그램 실행도중 필요한 이진
파일을 불러옴. 이렇게 필요한 이진파일을 불러오는 것을 링크라고함. 그리고 언제 링크하냐에
따라서 정적링크, 동적링크, 런타임링크라고 부름.

[ 프로세스 ]
컴퓨터를 간단히 말하면 절차적으로 어떻게 실행할지를 적은 Text 와 프로그램 실행중 Data를 저장하는
메모리로 이루어진 기계야. 수학적으로는 튜링머신이라고 해. C 에는 포인터라는 게 있는데 이 포인터가
메모리 안에서의 주로를 뜻해. 그런데 이 주소도 사실 가짜 주소라서 컴퓨터는 프로그램이 실행될때 마다
이 가짜 주소를 주고 이를 통해 프로그램간의 메모리를 분리함.

[쓰레드]
다른프로세스와 메모리를 공유하는 프로세스. light weight process 라고도 함.


[표준입출력]
프로그램이 실행되는 동안 값도 넣을 수 있고, 결과도 보여주어야 되. 그렇기 때문에 초기 컴퓨터에서
기초적이고 표준적인 실행환경을 만들었어. CUI (command user interface) 라는 것인데 리눅스라면
terminal 열면 나오는 거고, 윈도우라면 검색에 powershell 혹은 cmd 라고 치면 나오는 프로그램이야.
우리가 실행시킨 프로그램은 자신만의 프로세스에서 돌아가고 우리는 CUI 를 통해 해당 프로세스와
정보를 주고받는거. 예를 들어 프로그램이 미리 약속한 특정 파일에 값을 입력하면, CUI 는 그 파일로 부터
값을 읽어와 우리에게 보여주는 것이지. 반대로 우리가 입력한걸 파일에 적으면 프로그램이 그 파일로
부터 값을 읽어오거나, 이렇게 입력용, 출력용, 에러보고용 으로 총 3가지 표준파일이 있는데, 이를 표준
입출력이라고 함. 참고로 말이 파일이지 정확하게는 Pipe 구조이긴 함. c의 scanf 은 표준 입력파일에
\n(엔터를 뜻함) 데이터가 들어올때까지 기다린후, 표준 입력파일안의 값을 읽어서 적절히 반환해 주는 것임.