실행중인 프로그램 = 프로세스.
중요한건 프로세스의 컨텍스트. 프로세스의 컨텍스트엔 아래와 같은 정보들이 담겨있다.
크게 세가지로 나뉜다
한 프로세스만 주구장창 실행되는게 아니다. 고로 프로세스를 번갈아가며 실행하는데, 그때마다 정보를 교환해줘야 이전 프로세스의 정보를 알 수있다.
프로세스당 유지해야하는 정보들이다. 참고로 PCB는 커널의 data부분에도 들어간다!
시스템 콜이나 인터럽트에 의해 무조건 발생하는것이 아니다.
다른 프로세스로 넘어갈때 발생!
컨텍스트 스위칭이 일어나면, 캐시메모리는 삭제된다.
=> 프로세스가 바뀌어서 참조하는 정보가 다르기때문
프로세스가 실행되는 순서를 나타낸 도식도
한정적인 자원을 어떻게 분배할건지 나타낸다.
시분할 시스템을 사용하는 현대의 운영체제에선 장기스케줄러 사용x 그냥 ready상태(메모리 적재)로 넘김. 너무 소요시간이 길어서!
위의 세 상태 말고, suspended(stoped)가 있다.
외부에서 프로세스를 정지시켜놓은 상태! 즉 중기스케줄러가 디스크로 쫒아낸 상태. 아니면 사용자가 잠시 프로세스를 중지시킨 상태.
blocked하고 suspended를 구분하자. 자신이 신청한것 vs 남이 쫓아낸것!
프로세스에 대해 많은걸 배웠다.
1. 프로세스란?
2. 프로세스의 스케줄링(스케줄링이라는 단어까지)
3. 프로세스의 상태.
4. 프로세스의 동작 과정.(컨텍스트 스위칭)
프로그램이 어떻게 하드웨어에서 동작하는지 학습했다!
프로세스 안에 존재하는 개념.
프로세스 내부에 CPU 수행 단위가 여러개 있을때 쓰레드라고 부른다.
쓰레드는 PC와 스택을 개인적으로 할당받는다!
프로세스마다 주소공간과 PCB가 생긴다.
스레드는 그 안에 여럿으로 나뉨.
쓰레드의 장점!
responsiveness는 들을수록 JS의 비동기 동기 시스템과 비슷하다.
비슷하니까 그런 이름을 붙인거겠지?