- process : 사용자가 프로그램을 더블클릭해서 실행하게 되면 운영체제가 그 프로그램을
실행시켜줘야 한다. 그 프로그램을 실행시키는 주체 그것을 프로세스라고 한다. 다른 말
로 instance라고 부르기도 한다.- program : 쉽게 말하면 프로그램은 실행 파일이다. 파일 시스템에 존재하는 실행 파일을
프로그램이라고 한다.
즉, 프로그램을 실행하게 되면 CPU를 차지하면서 수행하는 수행 주체가 프로세스이다.
프로그램은 하나지만 이 프로그램을 실행하는 instance는 여러개 생길 수 있다
1950년대까지 hardware의 가격이 인건비보다 훨씬 비쌌기 때문에, 사람들은 어떻게 효율적으로 기계를 사용할지에 대해서 고민을 했다. 물론 os가 없었기 때문에 기계언어로 프로그램을 만들어야했을뿐만 아니라 디버깅도 offline으로 진행해야만 했다.
slow job-to-job transition
1960년대에 들어와서 프로그램을 일정한 묶음으로 처리해 효율적으로(그나마) 프로그램을 처리하는 batch processing이 나오게되었다. 설정과 중단하는 시간을 줄이면서 cpu utilization을 향상시켰다.
이 당시에는 모니터가 간단한 sceduler의 기능을 담당했는데, memory protection, timer, interrupt 등 여러 기능을 수행했다.
(a)에서 사람이 수행하는 setup과 takedown과정을 batch system(b)을 통해 batch내의 job들은 setup, takedown과정을 수행하지 않도록 함으로써 cpu utilization을 높였다.
하지만 batch내에 job이 하나밖에 없는 경우에는 여전히 overhead가 발생했다. 또한 I/O 수행을 할 때는 다른 job을 수행 할 수 없는 문제점이 아직까지 남아있었다. 이 문제는 해결하기 위해 나온 새로운 batch processing이 있었는데, 이것이 바로 multiprogramming batch processing이다.
- 여러 user들이 system을 공유하게 됨 : processor가 job 사이를 switch할 수 있어야함
-> 효율성을 위해 임의로 processor들의 순서를 바꾼다.- Simultaneous Peripheral Operations Online(SPOOL) : cpu의 명령을 RAM에 저장하고 그 명령을 주변장치로 전달하여 처리하는 방식이다.(직접 연결하면 서로의 처리 속도가 다르기 때문에 대기시간이 발생한다.) -> cpu utilization이 향상됨
- concurrent programming이 필요해졌다. -> 실행중인 process를 기다리는 동안 cpu는 멈춰있으면 안되기 때문이다.
concurrent : 서로 독립적인 여러 개의 process를 수행한다.
다만, cpu는 하나의 process만 실행 할 수 있기 때문에 process를 switching하면서 수행함으로써 여러 개의 process를 수행하는 것 처럼 보이게 한다. 결론적으로 여러 개의 process를 동시에 수행하는 것이 아니라 수행하는 것처럼 보이게 한다.
Synchronous I/O에서 processor는 I/O 작업을 시작하고 I/O 요청이 완료될 때까지 즉시 대기 상태로 전환된다. 즉, I/O 요청이 완료될 때까지 다른 process를 진행 할 수 없다는 것을 의미한다.
반면에, Asynchronous I/O를 수행하는 processor는 적절한 함수를 호출하여 커널에 I/O 요청을 보낸다. 커널에서 요청을 수락하는 경우 호출 스레드는 커널이 I/O 작업이 완료되었음을 스레드에 알릴 때까지 다른 작업을 계속 처리한다. 그런 다음 I/O 요청이 완료되면 이전 작업으로 돌아간 후에 그 작업을 마저 수행한다.
process들을 어떠한 기준을 통해 memory에 저장해야 할지를 결정해야한다. -> policy
process끼리 저장되어 있는 memory의 sector를 침범하지 않도록 하지위해서 policy가 필요하다. 어떤 process가 이미 할당되어있는 memory에 접근하는 경우에는 interrupt가 발생한다.
( interrupt는 간단하게 os의 에러처리라고 생각하면 편하다. 다음 게시물에서 자세하게 다룰 예정이다. )
1970년대 이후에는 집적회로의 발전으로 cpu의 속도가 엄청나게 향샹되었을 뿐만 아니라 인건비가 hardware의 가격보다 훨씬 더 비싸졌기 때문에 기계를 효율적으로 사용하는 것이 목적이 아니라 사람이 해야하는 일을 최소화하는 것이 목적이 되었다.
- Batch system의 논리적 확장 : cpu가 자주 process를 switching 해줌으로써 여러 user들이 process가 실행되는 동안에 상호작용 할 수 있게 되었다. -> interactive computing
- system clock이 interrupt를 발생시킴(time interrupt) : 한 process가 독점적으로 cpu를 점유하는 것을 방지하기 위해서 특정 시간동안 cpu를 점유한 이후에는 interrupt가 무조건 발생하도록 하는 것이다. -> sceduling 파트에서 자세하게 다룰 예정이다.
- process가 memory공간에 맞아 들어가지 않을 경우에는 memory에 있는 process를 policy를 기준으로 disk로 이동시키는 등 작업을 진행함 -> memory virtualization 파트에서 자세하게 다룰 예정이다.
적시성 : 디바이스 기기가 열악한 환경에서도 데드라인(deadline) 이내에 논리적으로 도 정확한 출력 값을 산출해 내는 것
Hard real-time system : 제어 작업이 데드라인을 어기는 경우 시스템에 심각한 영향을 주는 Time-critical 속성을 지닌 시스템
ex) 원자력 발전소 제어, 화재 경보 시스템, 항공기, 자동차
Soft real-time system : 제어 작업이 데드라인을 어기더라도 성능에 크게 영향을 주지 않으며, 무효화 처리 또는 복구 등을 통해 재가동을 할 수 있는 시스템
ex) 컴퓨터, 모바일 기기, 네트워크 관련 기기
- QoS(Quality of Service) : 네트워크(사전에 합의, 정의된 통신 서비스 수준) 상에서 일정 정도 이하의 지연시간이나 손실률을 보장
(데이터를 목적지까지 빠르게, 일정한 속도로, 신뢰성 있게 보내기 위해 각종 응용프로그램의 송신 수요를 지능적으로 맞추어 준다.) -> 일정 정도의 품질을 보장해 주는 것