-
11. 프로세스와 쓰레드운영체제/운영체제 정리 2019. 11. 11. 00:20
프로세스는 기본적으로 메인 메모리에 올라와있는 프로그램을 말한다.
프로세스는 프로세스에 의해 만들어진다.
즉 한 프로세스는 부모 프로세스를 가진다. OS는 부팅 후 첫 번째 프로세스를 만든다. 그러면 그 프로세스는 여러 자식
프로세스를 만들게 된다.
PID : 프로세스들에게 각각의 unique한 번호를 부여하는 것.
파일을 생성하는 시스템 콜은 open() 인 것처럼 역시 프로세스를 생성하는 시스템 콜이 있는데
바로 fork() 이다.
호출 시 새로운 프로세스를 만들게 되고 만들어진 프로세스를 메인 메모리에 가져오는 콜을 exec()
이라고 한다.
프로세스 종료하는 콜은 exit()이다.
exit()을 호출하면 해당 프로세스가 가진 모든 자원을 모두 회수하고 그 자원은 O/S가 가져가서
다른 프로세스에게 나누어 주게 된다.
스레드
스레드는 프로그램 내부의 흐름, 맥 이라고 한다.
하나의 프로그램은 일반적으로 하나의 흐름을 가지고 있다.
ex ) 자바의 메인 쓰레드
다중 쓰레드는 말 그대로 흐름이 여러 개 있는 것인데 어떻게 동시에 여러 개의 스레드가 돌 수 있을까?
이런 맥들이 빠른 시간 간격으로 스위칭되기 때문. 여러 스레드가 동시에 실행 되는 것처럼 보인다.
ex ) Web browser
화면을 출력하는 쓰레드 + 데이터를 읽어오는 쓰레드
ex ) Word processor
화면 출력 쓰레드 + 키보드 입력받는 쓰레드 + 철자/문법 오류 확인 쓰레드
앞서 봤던 이 그림은 사실 P1에 프로세스에 일부분을 실행하다가 다른 부분을 실행하게 된다.
P2와 P3로 마찬가지이다. 따라서 Context Switching의 단위는 프로세스가 아닌 스레드인 것
스레드의 구조
- 프로세스의 메모리 공간을 공유한다. ( 메모리 안에 있는 code, data )
- 프로세스의 자원을 공유한다. ( file , i/o... )
하지만 스택은 공유하지 않는다. 하나의 스레드가 실행하면서 함수 호출을 하게 될 텐데 return address 나 parameter
을 스택에 저장하게 된다. 스위칭 시 다른 스레드로 가야 하기 때문에 공유하지 않는다.
- 비공유 : 개별적인 PC, SP, registers, stack 등
프로세스(스레드) 동기화
만일 p1과 p2에 아무 관계가 없다면 independent process 영향을 받거나 미치면 Cooperating process이라고 한다.
실제로는 Indepdent 한 프로세스보다는 Cooperating 프로세스들이 훨씬 많다.
이때 스레드들이 공통된 자원을 동시에 접근하여 쓰려고 한다면 문제점이 발생할 수 있다.
따라서 이런 문제점을 해결하기 위해서 영향을 주고받는 스레드 들 간에 순서를 잘 정하여 데이터의 일관성이
유지되게 하는 것이 프로세스 동기화이다.
그렇다면 어떤 방식으로 프로세스 동기화를 해야 할까?
'운영체제 > 운영체제 정리' 카테고리의 다른 글
13. 교착상태 ( Deadlock) (0) 2019.12.15 12. 임계구역과 세마포어 (0) 2019.11.18 10. CPU 스케쥴링 (0) 2019.10.28 9. 문맥전환, 선점과 비선점 (0) 2019.10.13 8. 프로세스 관리 (0) 2019.10.07