Operating System
응용 프로그램의 실행을 제어하는 프로그램, 하드웨어와 소프트웨어 사이의 인터페이스
목적 : 유저에게 편리함 제공, 효율성 유지, 진화를 수용할 수 있는 인터페이스 역할
하는 일?
- 프로그램 개발
- 프로그램 실행
- I/O 디바이스 접근
- 파일 접근 제어
- System 접근
- 에러 탐지와 반응
- 계산
Key Interface
1. ISA ( Instruction set architecture )
2. ABI ( Application binary interface )
3. API ( Application programming interface)
OS 는 I/O, 주 혹은 보조메모리의 사용과 프로세서 실행 타임을 제어한다. / 일반적인 소프트웨어와 동일한 방식으로 기능한다.
OS의 발전
CPU 라는 자원을 어떻게 최대한 활용할지?
Serial Processing -> Simple Batch Systems -> Multiprogrammed Batch Systems -> Time Sharing Systems
1. Serial Processing
OS가 없었다. 프로그래머는 직접 컴퓨터 하드웨어와 소통해야함. user 는 컴퓨터에 연속적으로 접근해야함. scheduling 문제가 있었다( 낭비되는 컴퓨터 타임 ) , 프로그램 동작 세팅할 때 상당한 시간이 소요됐다.
2. Simple Batch Systems
-일괄처리 시스템/ 초기의 컴퓨터는 매우 비싸기 때문에 프로세스 활용을 최대로 하는 것이 중요했다.
-유저는 더이상 프로세서와 직접 접근하지 않았다.
-각각의 사용자가 어떠한 요청을하면 비슷한거 끼리 묶어서 한번에 처리하여 연산속도를 향상시켰다. 유사한 요구를 가지는 작업들( 각각의 작업을 job으로 제출)을 모아서 하나의 그룹(jobs로 제출 후 처리)으로 수행한다. 기계적인 입출력 장치의 속도가 CPU 보다 느리기 때문에 CPU가 쉬는 상태가 많았다.
-실시간 상호작용을 요구하는 상황에 부적합.
3. Multiprogrammed Batch Systems
-CPU가 수행할 작업을 항상 가지도록 하는 방식. (=멀티태스킹)
-먼저 하드디스크나 SSD에서 여러 개의 프로그램을 선택해서 메인메모리(RAM) 에 적재한다. 이후 메모리 내에 있는 작업 중 하나를 선택해 차례대로 실행한다. 이때 수행중인 작업이 입출력 때문에 기다리는 상태에 도달하면 CPU 는 다른 작업으로 넘어가서 수행을 계속한다. 이후 첫 번째작업이 끝나면 현재의 작업을 중단하고 다시 첫 번째 작업이 CPU 를 차지하게 된다. (=> 메모리는 3,4, 혹은 더 많은 프로그램을 지닐 수 있고 그것들 사이에서 switch 할 수 있다. )
- 다중 프로그램 시스템 덕분에 프로그램에서 카드를 읽거나 프린터를 쓰는 등의 시간에도 CPU 를 계속해서 사용할 수 있다.
(<-> Uniprogramming : 프로세서는 입출력에 도달할때까지 , 상당한 시간이 소요되고, 그때동안 아무것도 못하고 기다려야한다)
4. Time-Sharing Systems
다중프로그램의 장점을 채택해서 확장.
-프로그램이 아주 짧은 주기로 CPU를 각각의 프로그램에 할당해주는 방법.
-시분할 시스템으로 사용자는 프로그램이 수행되는 동안에도 상호작용할 수 있게 되었다.
-아주 짧은 주기로 전환이 이루어지기 때문에 각 사용자는 모든 프로그램이 동시에 작동한다고 느낀다.
- CTSS 는 초기 시분할 시스템 중 하나이다. time slicing 으로 알려진 테크닉을 활용한다.
Process
프로세스는 실행중인 프로그램이다. 실행되는 프로그램의 인스턴스이다.
프로세스 에러 발생
1. 부적절한 동기화 2. 상호 배제 실패 3. 불확실한 프로그램 연산 4. Deadlock
프로세스 구성요소
1. 실행중인 프로그램 2. 관련 데이터 3. 프로그램 실행 문맥
Virtual Memory
-physical 하게 이용가능한 메인메모리 (RAM) 없이도 logical 하게 메모리에 접근하는 프로그램을 허락함
- 메인메모리에 동시에 있는 여러 유저 job들을 가지는 요구 땜 고안되었다.
-실제메모리를 추상화하여 가상 메모리에 올림으로써 프로세스들이 연속된 물리적 메모리 공간처럼 여기게 만들 수 있을 뿐만 아니라 실제 메모리보다 많은 크기의 메모리도 운용이 가능하다.
페이징 방식에서는 가상 메모리 상의 주소 공간을 일정한 크기로 분할한다.
주소공간은 페이지 단위로 나뉘어져있으며 실제 기억공간은 페이지 크기와 같은 프레임으로 나누어 사용한다.
- Frame : 물리 메모리를 일정된 한 크기로 나눈 블록
- Page : 가상 메모리를 일정된 한 크기로 나눈 블록
Multithreading
프로세스와 쓰레드 차이
프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
프로세스는 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당 받는다.(code, heap, stack)
스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유한다.
프로세스는 생성에 큰 오버헤드가 있고, ( 프로세스를 생성할때 많은 시간이 소요됨), 프로세스 컨텍스트 스위칭의 비효율성과 프로세스 사이에 통신이 어렵다는 (IPC사용해야함) 등의 문제점이 있다. 그래서 프로세스보다 크기가 작은 실행 단위인 쓰레드는 등장했다. 쓰레드는 프로세스의 생성 및 소멸에 따른 오버헤드를 감소시키고, 빠른 컨텍스트 스위칭이 가능하며, 프로세스들간의 통신 시간, 방법의 어려움을 해소할 수 있다.
SMP
-컴퓨터 하드웨어 아키텍쳐를 일컬고, 그 아키텍쳐를 이용하는 OS 행위를 말한다.
-멀티쓰레딩과 SMP 는 종종 같이 논해지나, 다른 용어이다.
- SMP 는 멀티플 프로세서의 출현이 유저에게 투명하다
멀티스레드와 멀티프로세스 차이
멀티스레드는 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다. 멀티프로세스는 두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것이다. (병렬처리)
멀티 스레드는 멀티 프로세스보다 작은 메모리 공간을 차지하고 Contest Switching 이 빠른 장점이 있지만 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있다. 반면, 멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하는 단점이 있다. 따라서 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우엔 멀티프로세스를 사용하고, 메모리 공간이나 Context Switching 에서 이점을 보려면 멀티 스레드를 사용한다.
윈도우가 제공하는 유저모드 프로세스
1. Special System Processes : 시스템을 관리하는데 필요한 유저모드 시스템
2. Service Process : 디바이스 드라이버 다양한 네트워크 서비스와 협력하는 유저모드 요소
3. Envirionment Subsystems : 다른 OS 환경을 제공
4 User Application : 유저가 시스템 활용하기위한 기능을 제공하는 EXEs , DDL