타임쉐어링이라는 개념을 알고 있으면 좋다는 말에 오늘도 파먹어보기..!
하나의 CPU에서 여러 프로세스들을 동시에 실행하는 것처럼 보이게 만들기 위해
CPU의 유휴 시간을 최소화하고 자원을 최대한 사용하게 하는 것이다
cpu의 유휴 시간이란 말그대로 휴식하고 있는 시간을 줄여버리는 것으로
cpu는 컴퓨터에겐 핵심인 산술 계산기이고 한정적인데 쉬고 있다면 다른 작업들은 쉬는 시간을 기다리고 있으니 시스템이 효율적이지 않을 것이다.
멀티프로그래밍은 하나의 cpu가 여러 작업(프로세스)를 동시에 하지 않지만 동시에 하는 것처럼 보이게 빠르게 작업들이 바뀌는것이 핵심이다
운영체제(OS)가 CPU가 여러 작업들을 빠르게 바꿔가면서 처리하도록해서 모든 작업이 동시에 실행되는 것처럼 느껴지게 만드는 것이다.
이 멀티프로그래밍의 한 기법인데 차이가 있다면 프로세스가 CPU를 사용하는 방식과 그 시간의 배분이라고 할수 있다
내 착각 : 그럼 병렬 처리는 사실 병렬이 아니고 타임쉐어링이 만들어내는 환상인가..?
-> 병렬처리는 스레드가 병렬인거고 타임쉐어링은 스레드가 아닌 프로세스를 바꿔끼는 것으로 스레드를 가진 프로세스의 개념이라고 한다
운영 체제의 중요한 기능중 하나로 프로세스에게 CPU 시간을 어떻게 분배할지 결정하는 방식이다
프로세스들을 꺼내 CPU에 넣는 순서를 정하는 방식을 스케쥴링 알고리즘이라고 하는데 여러 종류가 있음
우선순위 기반 스케줄링(우선순위를 정하고 순위대로 시작)등이 존재
프로세스가 작업을 실행하기 위해서 준비하는 과정과 상태 변화
멀티프로그램과 타임쉐어링 둘다 작업을 빠르게 바꾸어서 동시에 프로세스가 실행되는것처럼 보이게 한다
중요한 차이점은 시간이다
멀티프로그래밍은 그냥 프로세스 하나가 끝나면 바로 다른 프로세스로 바꿔버려서 cpu가 쉬지 않고 일하게 하는거라면
타임쉐어링은 cpu를 사용할 시간을 모든 프로세스에게 분배한다.
그리고 한프로세스가 분배받은 시간을 초과한다면 작업이 다 끝나지 않았더라도 cpu에서 빠져나가고 다음 프로세스가 들어와서 작업을 하도록 한다.
그렇게 시간내에 다 못끝낸 프로세스는 큐에서 대기하고 있다가 CPU가 다시 여유가 생기면 타임슬라이스를 할당받아 실행되는 것이다
OS의 역할이란 다양해...