운영체제에서 무엇을 먼저 포스팅해볼까를 모르겠었다.
그래도, 개발하면서 제일 익숙한 코드와 관련된 부분부터 간단하게 정리하고 지나가는 것이 좋다고 생각했다.
일단 언어는 무엇이 있을까?
개발 트렌드에 있는 자바, 자바스크립트, 파이썬등이 있고,
컴퓨터 관련 전공 대학교 1학년들이 듣는(나때는 그랫어!) C언어가 있다.
확실히 배워보면 안다.
1학년때 C언어를 배우던 나는, 코딩이 이렇게 재미 없는건가 싶었다.
도대체 왜 공부하나 싶다.
그런데, 자바나 자바스크립트로 웹을 만들어보면 참 재밌다는 생각이 들었다.
둘의 가장 큰 차이가 뭘까?
사람이 쓰기 편하냐였다.
저급언어, 고급언어
저급언어와 고급언어가 가지는 차이점이 여기에서 보여진다.
저급언어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어라면,
고급언어는 사람이 쓰기 편한 상태의, 읽기 편한 상태의 언어이다.
즉, 고급언어는 사람이 사용하기 편한 상태로 새롭게 만든 언어지
컴퓨터가 바로 읽고 이해해서 실행시킬 수 없다는 것이다.
저급언어
저급언어에는 기계어, 어셈블리어 등이 존재한다.
기계어는 말 그대로 기계가 직접 사용하는 언어로, 0과 1의 2진수로 되어있다.
사람이 이걸 다 외운다? 이거 너무 어렵다....
그래서 어셈블리어가 개발되었다.
2진수로 되어있는 명령어가 아닌, 영어로 된 명령어를 쓴다.
어셈블리어는 어셈블러를 통해 기계어로 변환되어 컴퓨터가 명령을 수행한다.
또한, 하드웨어 명령어와 직접적으로 연관되어있다.
자바에서 int a = 3;이라는 코드는 그냥 Integer형 변수 a가 3이라는 값을 가진다. 라는 뜻이다.
하지만, 어셈블리어는 이런 방식이 아닌, 메모리에 3이라는 데이터를 할당한다.와 같이 직접 하드웨어에 명령을 내리는 방식이다.
고급언어
고급언어의 종류는 너무 많다.
이러한 고급 언어는 언어 자체별로 카테고리화시키기보단, 2가지의 큰 카테고리가 존재한다.
컴파일 언어, 인터프리터 언어로 분류가 된다.
컴파일 언어는 고급언어 파일들을 컴파일 해 저급 언어로 바꾸어주는 방식이다.
자바스프링을 사용해본 사람들은 알 것이다.
애플리케이션을 만들어서 실행을 했을 때, 실행 자체에서 에러가 발생한다.
컴파일 언어는 컴파일 단에서 에러가 존재한다면, 컴파일 자체가 실패하는 단점이 있다.
컴파일 성공시 저급 언어로 변환된 파일들이 생성되며, 이를 목적 코드라고 부른다.
고급 언어 코드는 소스코드라고 부른다.
인터프리터 언어는 한 줄씩 번역-사용을 반복하는 방식이다.
자바스크립트를 써본 사람은 이걸 안다.
자바에서는 컴파일단에서 에러날 수 있는 부분이, 에러가 발생하지 않는다.
즉, 실행시켜서 해당 코드가 동작할 때 까지 에러를 모른다!!
대신 컴파일 자체를 하지 않아도 된다는 점은 존재한다. (하지만 타입스크립트쓰면 js로 변환해야하죠?)
또한, 속도적으로 컴파일 언어보다 실행속도가 느리다는 아쉬운점이 존재한다.
컴파일 언어는 해당 코드가 수없이 실행된다고 생각했을 때, 한번 컴파일한 저급 언어를 계속해서 실행하는 것이다.
하지만, 인터프리터 언어는 수없이 반복해도 이를 번역-사용을 또다시 해야한다는 문제가 있다.
(물론 이를 해결하기 위한 JIT;Just In Time 컴파일러를 실행하는 브라우저등이 존재한다)
링킹(그뭔씹!)
예시를 들어서 생각해보자.
(실제로 해당 예시는 오류가 존재한다. java파일은 컴파일하여 class라는 확장자의 바이트코드 파일을 만들며, JVM에서 해당 클래스파일이 실행된다. )
(이해를 위한 극단적인 예시로 생각했을 뿐이다)
스프링으로 애플리케이션을 만들었다.
IDE등을 이용하는게 아니라, 각 파일을 하나씩 직접 컴파일했다고 가정해보자.
그렇다면 이건 실행시킬 수 있을까?
BOOL GAE NEUNG(불가능!!!)
왜 불가능일까?
컴파일을 하면 내가 작성한 소스코드들이 목적코드들이 된다, 즉 목적파일들이 다량으로 생성된다.
그런데, 우리의 소스코드가 있는 다양한 자바파일이 서로 변수를, 객체를, 함수를 불러와 사용한다.
하지만, 각 목적파일들은 서로를 불러와야 하는 것을 모른다고 한다.
이 목적파일들이 서로 연결되어야 한다는 것을 인식하게 해주는 것이 링킹이다.
링킹을 통해 목적파일들이 실행가능한 형태가 되고, 이런 실행 가능한 형태를 실행파일이라고 부른다.
'CS > 운영 체제' 카테고리의 다른 글
[운영체제] 리눅스 패키지(내가 맨날 헷갈린 apt쓸 때와 yum을 쓸 때) (1) | 2024.04.03 |
---|---|
[운영체제] 패키지(리눅스 배포 패키지, npm) (0) | 2024.04.03 |
[운영체제] 컴퓨터 구조 간단하게 정리해보기(부제. 왜 스왑 메모리가 느렸을까?) (0) | 2024.03.15 |
[운영체제] 주소지정 방식!(이거만 하고 진짜 컴퓨터구조와 운영체제를 봅시다) (0) | 2024.03.11 |
[OS] 파일 시스템 (부제 : 익숙함에 속아 소중함을 잊지 말자) (0) | 2023.08.08 |