- OS는 많은 CPU가 존재한다고 착각을 불러 이르킬 수 있다.
- Time sharing : 한 프로세스를 수행하다가 멈추고 다른것을 수행시키는 것
- 이 잠재적인 비용을 performance라고 한다.
ex) 하나의 CPU가 program1을 10ms동안 실행시키고 멈춘 후 program2를 10ms동안 실행시키는 과정을 1초동안 반복한다. 이때 사람들이 보기에 CPU를 2개 쓰는 것처럼 느끼게 한다.(program1,2는 virtual CPU를 사용한다고 생각) 1초에 prog1은 50번 prog2는 50번 동작함cf) program vs process => program이 실행되면 프로세스가 실행되고 program에 있는 모든 코드를 실행한다.
process는 동작하는 프로그램이다.
process의 구성
프로그램 코드를 프로세스의 메모리에 넣고, 주소 공간에 넣는다.
프로그램의 run-time 스택이 할당된다.
프로그램의 heap이 생성된다.
OS는 몇몇 다른 초기화 과정도 실행한다.
시작 지점인 main()이라는 공간에서 프로그램을 시작한다.
//ex) xv6 커널 Proc 구조
//register context
struct context{
int eip;
int esp;
int ebx;
int ecx;
int edx;
int esi;
int edi;
int ebp;
};
// 프로세스의 다양한 상태
enum proc_state{UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE};
// xv6가 각 프로세스를 어떨게 추적하는지
struct proc{ //PCB
char *mem;
uint sz;
char *kstack;
enum proc_state state; // 프로세스 상태
int pid;
struct proc *parent;
void *chan;
int killed;
struct file *ofiled[NOFILE]
struct inode *cwd;
struct context contect;
struct trapframe *tf;
} ;