개발자들은 고급언어( C, C++, JAVA, Python ... )으로 프로그램을 개발한다.
개발자가 고급언어로 소스코드를 작성하면
컴파일러는 소스코드를 컴파일하여 CPU가 이해할 수 있는 저급언어인 어셈블리어로 변환하고
어셈블러는 어셈블리어를 컴퓨터가 이해할 수 있도록 1과0 변환한 다음
링커가 동작하여 참조하는 라이브러리와 함께 엮으면 실행 가능한 파일(Excutable File)이 만들어 진다.
그리고 실행가능한 파일은 Disk에 저장된다.
이렇게 Disk에 저장된 실행가능한 파일을 두고, 우리는 프로그램(Program)이라 부른다.
그렇다면 프로세스(Process)란 무엇일까?
Disk는 크기가 크고 I/O가 느려 CPU와 일할 수 없다. 그래서 CPU와 Disk 사이에는 RAM이 존재한다. Disk에 있는 프로그램이 CPU의 처리대상이 되면 RAM에 메모리가 할당되는데, 이때의 처리단위를 프로세스(Process)라 부른다. 메모리에 할당된 프로세스 구조는 다음과 같다.
앞서 개발자가 고급언어로 작성한 소스코드는 CPU가 이해가능한 어셈블리어로 변환된다고 말하였다. CPU는 code 영역에 1 과 0으로 표현된 어셈블리 명령어를 하나씩 가져와 연산을 수행한다. 연산에 필요한 데이터는 CPU 안의 레지스터에 저장된다. 그런데 레지스터는 크기가 작다. 그래서 CPU는 메모리 주소로 데이터를 참조한다.
데이터는 종류에 따라 저장되는 위치가 달라진다. 전역적으로 접근가능한 데이터는 data 영역에, 함수와 관련된 지역데이터는 stack 영역에, 그리고 프로그램을 실행하며 동적으로 생성된 데이터는 heap 영역에 저장한다. 이렇게 데이터를 프로세스 메모리에 저장하면 CPU는 레지스터 만으로 모든 데이터에 접근하여 연산에 사용할 수 있다.
CPU가 어떤 원리로 RAM과 통신하여 연산을 수행하는지 구체적으로 알고 싶다면 영상을 하나 추천하니 참고 바란다.
추천 영상 : https://www.youtube.com/watch?v=Fg00LN30Ezg
정리하면,
실행가능한 파일이 Disk에 저장되어 있으면 프로그램(Program)이고
프로그램의 CPU 처리단위가 프로세스(Process)이다.
참고자료
'CS > OS' 카테고리의 다른 글
[OS] 프로세스 스케줄링 ( Process Scheduling ) (0) | 2024.01.17 |
---|---|
[OS] PCB란 무엇일까? (0) | 2024.01.15 |
[운영체제] 가상메모리 운영체제 정책 (0) | 2021.11.16 |
[운영체제] 페이지 크기가 미치는 영향 (0) | 2021.11.16 |
[운영체제] TLB ( Translation Lookaside Buffer ) (0) | 2021.11.16 |