여러 프로세스를 동시에 실행되는 것처럼 보이기 위해서는 CPU 공유는 불가피
-> CPU 시간을 나누어 사용해야한다
문제점 발생
그냥 cpu에서 실행하는것
직접 실행할 때...
두가지를 해결해야함
프로세스가 원하는 대로 CPU 직접 실행을 하면 특수 종류 연산 (ex) 디스크 입출력 요청, CPU 추가할당) 과 같은 원치 않은 연산을 하게 될수도 있음
user mode 도입
입출력 요청 할수없음 -> 시스템콜을 통해 실행
kernel mode
모든 작업 수행 가능
커널은 부팅 시 trap table 만든다
운영체제는 하드웨어에게 trap handler 위치를 알려준다
-> 특정 상황 발생 시 하드웨어는 무엇을 해야할지 알 수 있음
-> 보안 기법...
프로세스도 프로그램이고 운영체제도 프로그램
-> 둘중 하나만 실행 가능하다
=> 전환이 자유로워야 함
프로세스가 비정상적 행동은 하지 않는다고 가정
= CPU를 알아서 주기적으로 반환
-> 비정상적 행위(0으로 나누기) 나 시스템콜 호출시 운영체제로 주도권 넘어감 (수동적)
만약 무한루프에 빠지게 된다면 문제발생
위의 상황과 같이 시스템콜 없이 제어권을 가져오려면,,
-> 하드웨어의 도움을 받는다
판단은 timer interrupt로 한다
timer interrupt:
수 밀리 초마다 인터럽트라고 불리는 하드뒈어 신호 발생
인터럽트 발생시 interrupt handler 실행
-> 제어권이 운영체제로 넘어감
현재 프로세스를 중단하고 다음 프로세스로 넘어갈 때 context switch라 불리는 코드 실행
이 코드는 주로 어셈블리로 작성됨 (실행시간때문)
swtch.S 파일 코드 일부