프로그램 : 저장장치에 저장되어 있는 정적이 상태
프로세스 - PCB = 프로그램
프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
프로그램 + PCB = 프로세스
한개가 끝나야 다음 것이 가능
배분해서 여러가지 동시에 수행(현재 방식)
프로세스 제어블록 = 프로세스를 실행하는 필요한 중요한 정보를 보관하는 자료구조
문맥교환 : CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아 들이는 작업
실행중인 프로세스와 똑같은 프로세스가 하나 더 만들어진다.
fork()를 호출하면 프로세스 구분자, 메모리 관련정보, 부모프로세스 구분자와 자식프로세스 구분자가 바뀜
장점 : 프로세스 생성 속도가 빠름, 추가 작업없이 자원 상속, 시스템 관리 효율적이다.
기존의 프로세스를 새로운 프로세스로 전환하는 함수(재사용)
exec()를 호출하면 프로세스 구분자, 부모 자식 프로세스, 메모리 관련 사항 등은 변하지 않지만 프로그램 카운터 레지스터 값을 비롯한 각종 레지스터와 사용한 파일 정보가 모두 리셋된다.
프로세스가 종료된 후 부모 프로세스로 돌아올 수 있다.
여러작업을 동시에 처리할 수 있게 하고
프로세스 재사용이 용이하게 하고
자원회수가 쉽다.
회수 되지 않고 낭비된 프로세스
c언어의 exit() 또는 return()문은 자식 프로세스가 작업을 끝났음을 부모 프로세스에게 알리는 것으로 미아 프로세스를 미연에 방지한다.
os 운영에 효율성을 떨어트린다.
###스레드의 개념
cpu 스케줄러가 cpu에 전달하는 일 하나가 스레드이다.
프로세스의 코드에 정의된 절차에 따라 cpu에 작업 요철을 하는 실행 단위
처리 > 프로세스 > 스레드
프로세스끼리는 약하게 연결되있는 반면 스레드끼리는 강하게 연결되어 있다.
멀티 스레드
프로세스 내 작업을 여러 개의 스레드를 분할함으로써 작업의 부담을 줄이는 프로세스 운영기법
멀티 태스킹(fork)
운영체제가 cpu작업을 줄 때 시간을 잘게 나누어 배분하는 기법
멀티프로세싱
cpu를 여러개 사용하여 여러 개의 스레드를 동시에 처리하는 기법(슈퍼스칼라 기법)
cpu 멀티 스레드
하나의 cpu에서 여러 스레드를 동시에 처리하는 기법(파이프라인 기법)
멀티 스레드는 자원 할당의 효율화를 불러오지만
시스템에 오류가 생길 경우 프로그램 전체에 오류가 발생
커널 스레드 : 커널이 직접 생성하고 관리 하는 스레드
사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드
사용자 레벨 스레드
사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결되어 라이브러리가 스케줄링을 하고 작업에 필요한 정보를 처리하기 위해 문맥교환이 필요x(공유 x)
커널 레벨 스레드
하나의 스레드가 하나의 커널 스레드에 연결되어 있는 형식
독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 계속 작업 가능
문맥교환을 해 느리게 작동
멀티레벨 스테드
최근 os가 사용하는 스레드로 사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식
커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자가 레벨 스레드보다 유연하게 작업을 처리 할 수있다.