운영체제
- Category :
- operating-system
Process
프로그램 실행 단위(실행중인 프로그램)
스케줄링의 대상이 되는 작업(task)와 같은 의미로 쓰인다.
Process State
create : 프로세스가 처음 생성되었을 때
ready : 프로세서에게 할당되기를 기다릴 때(언제든 사용할 수 있는 상태)
running : 프로세서에 할당되어 실행될 때(cpu를 차지하여 명령으들이 실행되고 있다.)
terminated : 실행 중 종료될 때
waiting : 실행 중 작업이 완료되어 입출력을 기다릴 때
PCB(Process Control Block)
프로세서의 정보 묶음, 프로세스 상태와 프로그램 카운터, 메모리 한계, 레지스터 정보 등이 있다.
- 프로세스 상태 : 생성, 준비, 수행, 대기, 중지
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
- 레지스터 : 누산기, 스택, 색인 레지스터
- 프로세스 번호
CPU Switch
프로세서에 할당된 프로세스를 바꾸는 것. 시스템 콜을 사용해야 하는 경우 프로세스가 자체적으로 처리할 수 없기 때문에 운영체제가 개입해야 한다. CPU 스위칭을 할 때는 작업중이던 프로세스의 PCB 를 백업한다.
시스템 콜: 운영체제에서 프로개름이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등의 커널 모드가 있다. 시스템콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해준다.
Thread
프로세스 내에서 실행되는 흐름 단위.
스레드는 한 프로세스 내부에 적어도 하나 존재한다.
프로세스와 스레드
멀티프로세서에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있지만 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 프로세스간의 전환 속도보다 스레드간의 전환속도가 빠르다.
Process Scheduling
어떤 프로세스를 프로세서에 할당할 것인가를 결정하는 일. 스케줄러에는 ready 상태의 프로세서가 쌓여 있는 레디 큐(Ready queue)에 프로세스를 옮기는 Long-term 스케줄러와 프로세스를 프로세서에 할당하는 Short-term scheduler가 있다.
Context Switch
멀티프로세스 환경에서CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 한다. 프로세서가 다른 프로세스로 스위치할 때, 시스템은 작업중이던 프로세스의 상태 또는 레지스터 값(context)를 저장하고 새로운 프로세스의 상태 또는 레지스터 값(context)를 교체하는 작업을 Context Switch라고 한다.
Context : OS에서 컨텍스트는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이고 PCB에 저장된다.
Process Creating
프로세스는 트리 구조로 되어 부모 프로세스가 자식 프로세를 만든다. PCB에 저장된 pid값으로 프로세스를 식별하는데, 이는 운영체제가 정해준 고유 번호다. 시스템 콜의 fork()함수를 호출하면 부모 프로세스는 자신과 똑같은 자식 프로세스를 생성한다. 자식 프로세스는 exec() 를 통해 내용을 모두 바꾼다. fork() 함수는 부모 프로세스에겐 자식 프로세스의 pidㄹ르 자식 프로세스에겐 0을 반환한다. 부모 프로세스와 자식 프로세스는 동시에 작동한다.
Process Termination
exit()를 호출하면 프로세스를 종료시킬 수 있다. 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식 프로세스는 그 상위 프로세스를 부모 프로세스로 바라본다. 자식 프로세스가 종료되었는데, 부모 프로세스가 자식 프로세스가 반환한 정보를 회수하지 않으면 자식 프로세스는 종료되었음에도 정보가 메모리에 남아 있는 좀비 프로세스가 된다.
Interprocess Communication(IPC)
프로세스는 독립적으로 동작하거나 서로 협력하며 동작할 수 있다. 협력하는 프로세스들은 통신하며 서로에게 영향을 미친다. IPC 모델에는 메시지 패싱과 공유 메모리가 있다.
출처:
https://parksb.github.io/ [공룡책으로 정리하는 운영체제]
https://jeong-pro.tistory.com/93 [기본기를 쌓는 정아마추어 코딩블로그]