kocw-반효경교수님-운영체제2017 강의 내용을 정리하였습니다.
함수
사용자 정의함수
라이브러리 함수
사용자 정의 함수와 라이브러리 함수는 프로세스의 코드 영역
커널 함수
커널의 코드 영역
프로세스의 문맥(context)
과거에 cpu를 얼마나 사용했는가
메모리를 얼마나 차지했는가
파일은 몇 개나 열어뒀는가 등
Running
Ready
Blocked(wait, sleep)
CPU를 줘도 당장 instruction을 수행할 수 없는 상태
Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
하드웨어(I/O) 처리가 시간이 오래걸려서 blocked상태가 되는 것만은 아니다.
프로세스간의 공유 데이터를 같이 사용하게 될 때에도 blcoked 상태가 될 수 있다.
Suspended (stopped)
외부적인 이유로 프로세스의 수행이 정지된 상태
프로세스를 통째로 디스크에 swap out 된다
예시) 사용자가 프로그램을 일시 정지시킨 경우 (break key)
시스템이 여러 이유로 프로세스를 잠시 중단시킴
(메모리에 너무 많은 프로세스가 올라와 있을 때)
New : 프로세스가 생성중인 상태
Terminated : 수행이 끝난 상태
Blocked : 자신이 요청한 event가 만족되면 Ready
Suspended : 외부에서 resume해 주어야 Active
프로세스 - fork a child
자식 프로세스를 만드는 것(자신을 복제하는 것과 같다.)
현대 운영체제는 Long-term sceduler가 없다.
프로세스를(new 상태없이) 바로 메모리에 ready 상태로 올라간다.
그래서 medium-term scheduler가 메모리를 빼앗는 역할을해서 메모리 관리를 한다.
다중 스레도 구성된 테스크 구조에서는 하나의 서버 스레가 blocked(waiting) 상태인 동안에도 동일한 테스크 내의 다른 스레가 실행(running)되어 빠른 처리를 할 수 있다.
동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
스레드를 사용하면 병렬성을 높일 수 있다. (다중코어 멀티프로그래밍)
응답성
자원 공유
경제적
운영체제가 스레드의 존재를 알고있는 경우, Kernel Threads
사용자가 멀티스레드로 프로그램을 구현했으나 운영체제가 하나의 프로세스로 보는 User Threads
리얼타임목적으로 사용하는 스레드도 있다.
fork()
시스템 콜이 새로운 프로세스를 생성fork()
다음에 이어지는 exec()
시스템 콜을 통해 새로운 프로그램을 메모리에 올림
자바 스레드와 관련해서
자바 스레드는 유저 스레드일까? 커널 스레드일까?
자바 스레드는 유저 스레드이다. 그렇다면 운영체제가 멀티스레드인지 모르기때문에 다대일로 매핑 되지 않을까?
- 그렇지 않다. 다대일의 방식의 다중 스레드 모델이 아닌 커널과 1대1로 매핑해주는 일대일 모델을 채택한다.
- 초기 자바에서는 다대일 모델을 사용했었다. (green thread )
그 이유는 JVM에서 찾을 수 있다.
- JVM은 일반적으로 호스트 운영체제에서 구현된다.
- 그리고 JVM은 하부 운영체제의 구현 세부 사항을 숨기고 자바 프로그램이 JVM을 지원하는 모든 플랫폼에서 작동할 수 있는 일관되고 추상적인 환경을 제공한다. (platform independent)
- 그에 따라 자바의 스레드는 하부 운영체제와 매핑이 되는 방법을 명시하지 않고, 각 JVM의 구현에 맡긴다(운영체제에 종속적) 스레드 스케줄링 또한 또한 동일하다.
- 그래서 자바의 스레드는 Windows 시스템에서는 windows API(스레드 라이브러리)를 통해 구현하고, UNIX, Linux, macOS 시스템에서는 Pthreads(스레드 라이브러리)를 통해서 구현된다.
- 그렇기때문에 자바에서는 스레드 스케줄링을 할 수 없다. 우선순위를 설정을 할 수는 있지만, OS의 스레드 스케줄링에는 어떠한 영향을 미치는 지는 알 수 없다.
그렇다면 왜 일대일 모델일까?
- 현대 시스템에서 처리 코어 수가 증가함에 따라서 커널 스레드 수를 제한하는 것의 중요성이 줄어들었다.
- 그래서 현대 운영체제의 다중 스레드 모델이 대부분 일대일 매핑이다.