우주코딩
본격 코딩 준비하기 / 프로그래밍 - 기계어와 OS 본문
*VScode 설치
-소스파일 편집기
ㄴ명령어를 작성한 파일, 실행 파일을 만들 때 사용
-HTML/CSS/JavaScript 파일 편집
*C,C++ 컴파일러 설치
- Window gcc = Mingw64 설치
gcc - 컴파일러
컴파일러를 사용할때마다 위치 지정이 불편하기 때문에 운영체제에 미리 등록
등록하는 방법
-gcc 컴파일러가 설치된 폴더의 경로를 OS환경변수 path에 등록
-> gcc 컴파일러를 실행할 때 경로 지정할 필요가 없다
* JavaScript엔진 = Node.js설치하기
-자바스크립트 실행하는 엔진
자바스크립트로 작성한 명령어를 실행
Nodejs.org에서 다운로드
*프로그래밍 -프로그램 만들고 실행하기
1.컴파일 방식
명령어 작성
cpu가 인식할 수 있는 명령어를 컴파일을 통해 기계어로 바꾼 뒤 운영체제에 전달 -> CPU가 명령어 처리
*기계어와 CPU
핀 8개로 값넣고 연산 = 8비트 cpu
8비트를 더 더해서 16개 핀으로 데이터,연산자 넣어서 작업수행 =16비트 cpu
우리가 쓰는 일반 컴퓨터 64bit(운영체제)
내부적으로 cpu가 다르더라도 운영체제 규칙을 동일하게 맞추는 것 = 호환
명령문 -> 인텔 cpu기계어 -> 인텔 cpu = 실행, AMD cpu = 실행가능
ㄴAMD cpu랑 인텔 cpu 명령 규칙에 따라 동작하도록 설계 되었기 때문에=>Intel CPU compatible(호환)
명령문 -> 인텔 cpu기계어 -> ARM cpu = 실행 불가능
ㄴcpu 규칙이 다르기 때문에
명령문 -> ARM cpu 기계어(번역을 다시) -> ARM cpu = 실행가능
어셈블리 언어 = 기계어와 비슷하게 표현하지만 기계어는 아님 - > 번역해야함 (어셈블리 컴파일러가 필요하다)
기계어 = cpu 명령어 = cpu instruction
핀의 규칙을 cpu instruction set이라고 한다
Instruction set = 기계어
*기계어 만들기
명령문을 작성할때 사용하는 언어(랭귀지) = "프로그래밍"
ex) Java C++ JavaScript
명령 ->번역 (컴파일러) ->기계어
ex) gcc (=mingw64)
명령문 = 소스파일
기계어 = 오브젝트 파일
$gcc 소스파일명
$gcc -o 실행파일명 소스파일명 = 이름주기
<cmd에서 실행하기
소스파일 폴더로 이동
gcc hello.c
gcc hello.exe 아니면 hello 만 입력해도 출력 가능>
*기계어와 OS
hello.c 소스파일 ->hello.exe ->하드디스크에서 램으로 읽는 것(로딩) -> 윈도우OS (가능), 리눅스(불가능), 맥os(불가능)
ㄴ운영체제마다 기계어를 배치하는 방법이 다르다
cpu가 같더라도 컴파일 할 때는 운영체제 양식에 맞게끔 번역해야 한다.
같은 소스를 컴파일 하더라도 맥os용 c컴파일을 사용해야 맥에서 사용 가능하다. = intel cpu기계어 + macOS 배치
hello.c -> Windows intel cpu 컴파일러 (기계어) -> windows -> intel cpu (가능), ARM cpu (불가능)
다른 cpu 같은 운영체제(Windows) -> 기계어가 다르니까 아예 불가능
hello.c- > Windows ARM 용 C컴파일러 (기계어)-> windows -> ARM cpu (가능)
즉, cpu와 운영체제 모두 같아야 한다
2. 인터프리터 방식 = JavaScript, PHP, Python 등
소스파일의 명령을 도우미 프로그램을 통해 바로 실행 (통역기 =interpreter)
hello.js (JavaScript 언어로 명령어를 작성한다) ->node.js (자바스크립트 인터프리터 or 엔진) -> OS (실행)
$node 소스파일명
ex) node hello.js
'본격 코딩 전 기초' 카테고리의 다른 글
부동소수점을 2진수로 저장하기, 문자를 2진수로 저장하기 (0) | 2021.07.06 |
---|---|
값이란 무엇(1), 값과 메모리크기 (0) | 2021.07.05 |
함수,클래스,패키지, javadoc 만들기, eclipse에서 프로젝트 import하기 조건, Gradle이용하여 eclipse 관련 프로그램 만들기 (0) | 2021.07.02 |
프로그래밍 언어와 인터프리터, Java 프로그래밍, 어플리케이션과 프로젝트 (0) | 2021.06.30 |
소프트웨어란? / 웹 어플리케이션 개발의 종류/ git 기본 설정, git 저장소 활용하기 (0) | 2021.06.29 |