프로세스가 메모리를 할당 받으면 자신만의 방법으로 메모리를 관리하기 위해 이 공간들을 어떠한 구조로 관리하는데 이를 프로세스 주소 공간이라 부른다.
초기화 하지 않은 변수들은 BSS 영역에 저장된다.
스택은 생성과 동시에 크기가 정해진다. 힙은 필요에 따라 동적으로 확장 혹은 축소를 하게 됩니다.
Cpu가 직접 관리하고 최적화 하기 때문에 stack이 빠르다.
데이터를 공유하여 메모리 사용량을 줄이기 위해서 이다. code같은 경우 같은 프로그램 자체에서 모두 같이 사용하기 때문에 관리ㅏㅎ여 공유하고, stack과 data영역을 나누는 이유는 스택 구조의 특성과 전역 변수의 활용성을 위해서이다.
스레드는 프로세스 내에서 각각의 스택만 할당받고 나머지 영역은 공유합니다.
현대에는 장기 스케쥴러를 보통 사용하지 않는다.
프로세스는 suspended되어 디스크로 swap out 된다.
스레드가 빠르다.
TCB가 PCB보다 가볍다.
프로세스 내 스레드는 공유하는 영역이 많아 TCB에는 stack 및 간단한 레지스터 포인터만 저장하기 떄문에 읽고 쓸때 빠르다.
캐시 메모리를 초기화 하지 않아도 된다.
프로세스 내 스레드 간에 스택과 레지스터 값 등 일부 컨텍스트 정보만 변경되므로
모르겠다.
다단계 큐에서 자신의 Time quantum를 다 채우면 밑으로 다 채우지 않은 프로세스는 원래 큐 그대로
짧은 작업에 유리
Turnaround가 작아짐
Time Slice가 커지면 FCFS와 같고 작아지면 context switching이 잦아진다.
멀티레벨 피드백 큐, 멀티레벨 큐 등을 사용하면 우선순위가 높은 것부터 실행하기 때문에 좋다.
실제로 동시에 여러작업이 처리
멀티 코어에서 멀티 스레드 동작
프로세스가 요구하는 작업 및 processing time은 달라지는데 multi-level queue로는 이를 대응할 수 없다.
아주 오래 걸리는 작업이 계속 우선순위를 높게 차지한다면 다른 프로세스들의 Response time 및 turnaround time이 높아진다.
이를 해결한것이 MLFQ
뮤텍스는 동기화 대상이 하나일때만 사용, 세마포어는 여러 가지 이상일 때 사용
세마포어는 소유할 수 없으나 뮤텍스는 소유할 수 있다.
참고자료
- https://velog.io/@klm03025/운영체제-프로세스-주소-공간
- https://wikidocs.net/193616#:~:text=스택은%20일반적으로%20고정,으로%20확장%20또는%20축소됩니다.
- https://leemyungjic.tistory.com/26
- https://seongeun-it.tistory.com/181#:~:text=의해%20정리됩니다.-,주소%20공간을%20나누는%20이유,사용량을%20줄이기%20위해서%20입니다.
- https://gwanhyeon.github.io/OS-20201116-OS-Process-Thread/
- https://kosaf04pyh.tistory.com/191
- https://inpa.tistory.com/entry/👩%E2%80%8D💻-프로세스-⚔%EF%B8%8F-쓰레드-차이
- https://velog.io/@becooq81/운영체제-프로세스-스케쥴링-알고리즘
- https://icksw.tistory.com/124
- https://incheol-jung.gitbook.io/docs/q-and-a/computer-science/undefined-1
- https://blog.seongjun.kr/26-difference-between-binary-semaphore-and-mutex/