1) 프로세스에 설정된 우선 순위는 프로세스 스케쥴러에 따라 효과가 없을 수도 있다.
2) nice() 함수를 사용하여 프로세스의 우선 순위를 설정할 수 있다.
3) getpriority() 함수를 사용하면 프로세스, 프로세스 그룹, 유저에 따른 우선 순위를 읽어올 수 있다.
시분할 시스템: 다중 사용자 지원을 위해, 컴퓨터 응답시간을 최소화하는 시스템
멀티 태스킹: 단일 CPU에서 여러 응용 프로그램이 동시에 실행하는 것처럼 보이는 시스템
멀티 프로그래밍: 최대한 CPU를 일정 시간당 많이 활용하는 시스템
!! 프로세스에서 다음 실행할 명령어의 주소를 가지고 있는 레지스터는? PC
(1) Job Queue(batch queue)
(2) Ready Queue
(3) Device Queue
다수의 프로세서가 협력적으로 일을 처리하는 것을 의미, 여기서 주의해야 할 점은 프로세스가 아니라 프로세서이다. 다수의 프로세서가 다수의 작업을 함께 처리하는 것을 의미.
-우선순위 기반 : Windows에서 채택하고 있는 대표적인 선점형 스케줄링 알고리즘 중 하나인 우선순위 스케줄링 알고리즘은 각각의 프로세스마다 우선순위를 부여해서 우선순위가 높은 프로세스를 먼저 실행시키는 방식이다.
-라운드로빈 : Windows에서 채택하고 있는 대표적인 선점형 스케줄링 알고리즘 중 하나인 라운드 로빈 스케줄링 알고리즘은 우선순위가 동일한 프로세스의 경우, 형평성 유지를 위해서 정해진 시간 간격만큼만 실행을 하고 우선순위가 동일한 다른 프로세스에게 CPU의 할당을 넘기는 방식을 제공한다.
-비선점형 : 비선점형 OS는 현재 실행중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다.
새로 등장한, 보다 높은 우선순위의 프로세스가 실행되기 위해서는 현재 실행중인 프로세스가 명시적으로 CPU를 양보할 때 까지 또는 I/O 작업 등으로 현재 실행중인 프로세스가 블로킹 상태에 놓일 때 까지 기다려야 한다.
오늘 날 대부분의 OS는 프로그래머가 사용하는 키보드, 혹은 마우스 입력에 민감하게 반응하고 프로그래머와 대화를 계속하면서 그 결과에 따라 프로그램을 구동하는데, 이러한 시스템을 인터렉티브 시스템이라고 한다. 비선점형 OS의 경우 이러한 인터렉티브한 프로그램을 구현 시 프로그래머의 의존도가 높아지는 문제점이 생긴다.
외부 인터럽트 vs 내부 인터럽트
: 외부적인 입출력 장치가 원인인지, 잘못된 명령이나 잘못된 데이터를 사용할때인지
소프트웨어 인터럽트 : 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
시스템 콜과 인터럽트: 시스템 콜 호출을 위해 강제로 코드에 인터럽트 명령 (int 0x80) 을 넣어 CPU에 전달함
TEXT(CODE) : 프로그램 코드가 저장되는 공간
DATA
STACK : 함수 실행을 위한 지역 변수등이 저장된 공간
Heap : 동적으로 할당된 메모리를 저장하는 영역
큐 자료구조와 같은 FIFO 방식이며 한번데 등록된 여러 프로그램들을 컴퓨터 프로그램의 실행 요청 순서에 따라 순차적으로 실행하는 방식이다.
시스템콜 함수: open() , write(), read()
시스템 콜의 구현 방법 : CPU는 사용자 모드를 커널 모드로 바꿔준다.
IDT에서 0x80에 해당하는 주소를 찾아서 실행한다. 해당 시스템 콜 함수를 실행 한 후, 커널 모드에서 사용자 모드로 변경하고 해당 프로세스의 다음 작업을 수행한다.
쓰레드 별로 register따로, stack따로 있다. code와 data를 공유.
레지스터를 갖고있기 때문에 별도로 동시에 실행이 가능하다
기본적으로는 하나의 프로세스에서는 여러 개의 쓰레드를 생성할 수 있다.
쓰레드들 간에는 동일 프로세스의 데이터를 접근할 수 있다.
쓰레드는 Light Weight Process 라고도 불리운다.
장단점
장점 - 1)쓰레드간 커뮤니케이션시 IPC 와 같은 기법을 사용할 필요가 없다라는 점이다.
2) 사용자에 대한 응답성을 향상시킬 수 있다라는 점이다.
3)여러 쓰레드를 생성하고, 실행해도 성능이 저하되지 않는다는 점이다.
**단점** - 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받음, 스레드를 많이 생성하면, Context Switching이 많이 일어나, 성능 저하