2.1 운영체제, 프로세스, 스레드의 근본 이해하기
모든 것은 CPU에서 시작된다
cpu는 오직 1. 명령어를 가져온다 , 2. 명령어를 실행한다 를 반복 실행하는 단순한구조이다. 그렇기에 이 cpu로부터 시스템을 파악하는 것이 좋다.
거슬러 올라가보는 명령어 실행 순서.
- cpu는 명령어를 카운터 레지스터에서 가져오고,(작지만 빠른메모리)
- pc레지스터에는 메모리에 저장된명령어 주소(cpu가 다음에 실행할 명령어)가 저장되어있다.
- 기본적으로 pc레지스터가 저장하는 주소는 1씩 자동 증가하지만,(차례로 실행하ㅣ는구조이기 때문) , if else와 같은 구문을 만날 경우, 지정한 점프 대상 주소로 pc레지스터값을 동적으로 변경한다.
- 메모리에 저장된 명령어는 디스크에 저장된 실행 파일에서 적재되고, 실행파일은 컴파일러로 생성된다.
- 그리고 컴파일러는 프로그램이 작성된 코드. 를 통해 명령어를 생성한다.
- 여기서 시작 지점은 우리가 항상 선언하는 main입니다. 이 메인함수에 대응하는 명령어가 pc 레지스터에 기록되는 첫. 시작점입니다!
- 실제로는 main함수를 실행하기 전에 일부 레지스터의 초기화처럼 별도의 초기화 과정이 진행됩니다.
종합 : 코드→ 컴파일러가 실행파일을 생성→ 실행파일을 통해 명령어를 적재하여 메모리에 저장→ 레지스터가 뽑아서 저장해둠 → cpu가 읽어서 처리
CPU에서 운영 체제까지
위의 방법을 통해 우리는 운영체제없이도 명령어를 실행할 수 있지만, 실제로 하려면 생각보다 더 복잡한 과정을 요합니다.
또한, 수동 프로그램 실행에는 추가적인 단점이 많이 존재합니다.
- 한 번에 하나의 프로그램만 가능. (다중코어활용 불가.)
- 모든 프로그램은 사용할 하드웨어를 직접 특정 드라이버와 연결해야합니다.
- print와 같은 기본 라이브러리 함수마저 직접 코드를 짜야합니다.
멀티태스킹은 어찌하는가(그리고 프로세스)
cpu는 한 번에 한 가지 일만을 할 수 있기에, 여러가지 프로그램이 동시에 실행되는 것처럼 보이게 하기 위해 프로그램 여러개를 잠깐 실행했다가 중지하고,, 의 전환을 빠르게 반복합니다. 그럼 착시 가능