ARM processor에 대해 간단히 정리해보면
CPU에는 총 16개의 register가 존재하며
0번~12번은 general purpose register, 13번은 stack pointer, 14번은 link register, 15번은 PC이다
ARM processor에서 사용하는 instruction은 총 3가지 종류로 구분할 수 있다.
- Data processing : add, sub, move...와 같이 data를 처리하는 명령어
- Data transfer : ldr, str와 같이 memory에 접근해 data를 read/write하는 명령어
- Control flow : branch, jr와 같이 흐름을 제어할 수 있는 명령어
예를 들어 add r0, r1 ,r2라는 instruction은 r1과 r2 register에 저장된 값을 더해 r0 reigster에 저장하는 명령어이다.
이 때 r0를 destination register, r1과 r2를 source register라고 한다.
program = code(instructions) + data
PC register는 수행할 1개의 instruction의 주소만 저장하고 있기 때문에 1개의 CPU는 1개의 program만 실행 가능하다.
하지만 우리가 컴퓨터를 사용할 때 여러 program을 동시에 실행하는 것처럼 느껴진다.
이는 cpu virtualization 때문에 가능하다.
process마다 CPU를 가지고 있다고 착각하는 현상이다.
이를 위해 time sharing 기법을 사용하는데
time sharing이란 process를 실행하고 멈추고 다른 process를 실행하는 것이다.
예를 들어 program A를 10초, program B를 10초 실행하면 A와 B가 동시에 실행되는 것처럼 느껴질까?
반면에 A를 1ms, B를 1ms씩 반복해서 실행하면 A와 B가 동시에 실행되는 것처럼 느껴질 것이다.
이렇게 시간 간격을 줄이면 동시에 실행되는 것처럼 느껴지고 process가 바뀌는 것이 context switching
context switching은 상수값인 overhead가 발생하기에 switching이 잦을수록 performance가 저하된다.
A Process is a running program
말 그대로 실행 중인 program을 process라고 부른다.
process는 Memory(address space) = instruction + data section과 Registers로 구성된다.
우리가 program을 실행하면 program의 code와 data가 memory로 복사되고
PC가 program의 main함수의 첫 번째 instrcution을 가리키게 된다.
그 후 instruction을 실행하면서 register의 값이 계속 변경된다.
- Create : create a new process to run a program
- Destory : halt a runaway process
- Wait : wait for a process to stop running
- Miscellaneous Control : some kind of method to suspend a process and then resume it
- Status : get some status info about a process
- program의 code+data를 memory(address space)에 load
program은 disk에 executable format으로 저장되며 program의 크기가 크기 때문에 필요한 부분만 부분적으로 load하여 lazily하게 사용한다.- stack 영역을 할당한다
stack에는 지역변수, 매개변수, return address등이 저장되며 처음에 main함수의 argc와 argv가 저장되며 initialize된다.- heap 영역을 할당한다.
동적할당을 위해 필요한 공간, malloc()과 free()를 이용해 heap영역에 공간을 할당/해제
반면 전역변수는 data 영역에 할당된다.- OS는 I/O setup과 같은 initialization tasks를 한다.
- program의 main함수에서부터 실행한다.
이 때 원래 CPU에 대한 control은 OS가 가지고 있는데 process가 실행되면 CPU에 대한 control이 process로 넘어간다.
- Running : CPU에서 실행되는 상태
- Ready : 실행 준비는 끝났으나 실행되지 않고 대기하는 상태
- Blocked : CPU에서 실행되고 있는 process에서 I/O 명령을 실행할 때 DISK와 같은 외부장치접근은 속도가 굉장히 느리기 때문에 process를 blocked 상태로 만들고 ready 상태의 process를 scheduling 해서 CPU의 낭비를 방지
- OS의 구조
- Process list
Ready processes (Ready queue)
Blocked processes (Sleep)- Current running process
- PCB (Process Control Block) : process에 대한 거의 모든 정보를 저장하는 구조체
Register context : switching되기 직전, process의 실행 상태를 저장
proc 구조체 = PCB, context 구조체 = Register context로 각종 register 값들을 저장하고 있다.
상태를 보면 sleeping = blocked, runnable = ready로 생각하면 된다.