본문 바로가기

컴퓨터구조 _ 시스템 프로그래밍 _ 운영체제

CPU, 어셈블리 언어, 기계어, 어셈블러, 컴파일러, 링커, 로더, 커널 , 쉘

프로그램은 0과 1로 이루어진 "명령어"(기계어) 의 집합이다.  -> Object file

이러한 목적파일(기계어로 쓰여진 명령어들)을 하나로 모아서 커널(운영체제에 dependency 가 있음) 과 연결하여 실행파일을 만든다.

이 역할을 링커가 담당한다.

이러한 기계어는 CPU 마다 다르게 정의되어 있어서 dependency 가 존재한다.

프로그램이 메인메모리에 배치되면 프로세스라고 불린다.

 

기계어는 사람이 이해할 수 있는 저급언어인 어셈블리어(mnemonic)로 표현할 수 있다.

이러한 어셈블리어도 당연히 CPU에 따라서 다르게 정의된다.

어셈블리어를 기계어(opcode)로 번역해주는 역할을 어셈블러가 담당한다. -- CPU 내에 회로로 구현되어 있다.

 

이러한 dependency를 없애기 위해, C언어와 같은 고급언어가 나타났다. 

C언어는 CPU의 종속성이 없어서 CPU 마다 다시 작성하지 않아도 된다.

C언어와 같은 일부 고급언어를 어셈블리어로 번역해주는 역할을 컴파일러가 담당한다.

 

고급언어 -> (컴파일러) -> 어셈블리어 -> (어셈블러) -> object files(기계어로 쓰여진 목적파일들) -> (링커) -> 실행파일

 

----------------------------------------------------------------------------------------------------------------------

 

쉘 : 유저의 명령어를 받고, 해석

커널 : 해석한 명령어를 통해 하드웨어를 조작하는 곳. // 운영체제에서 소프트웨어와 하드웨어간의 커뮤니케이션을 담당하는 곳.

운영체제에서 매우 중요한 역할을 담당하므로 컴퓨터 부팅시 부트로더에 의해 로드되어 메모리에 상주하게 된다.

 

 

사용자 명령은 쉘에서 해석되고, 커널에서 수행되어 하드웨어를 조작하고, 결과를 쉘에 전송, 쉘에서 사용자가 알 수 있는 언어로 해석되고, 결과가 사용자에게 출력됨.