2022. 9. 19. 01:05ㆍ개발 관련 책 읽기/리눅스 커널 내부구조
태스크란 무엇일까? 프로세스나 쓰레드의 차이점은 무엇일까?
일반적인 운영체제 서적에서는 태스크를 자원소유권의 단위로 쓰레드를 수행의 단위로 정의한다
프로세스를 동작중인 프로그램 프로그램은 디스크에 저장되어 있는 실행 가능한 파일 형태이다
실행 파일 자체는 그저 디스크에 저장되어 있는 수동적인 존재에 불과하다
파일 형태로 존재하고 있는 프로그램이 수행되기 위해서는 리눅스 커널로부터 CPU등의 자원을 할당받을 수 있는 동적인 객체가 되어야 한다 . 이 동적인 객체가 프로세스이다.
결국 프로세스는 동작중인 프로그램이며, 커널로부터 할당받은 자신만의 자원을 가지고,CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재이다
32bit CPU경우 운영체제는 각 프로세스에게 총 4GB크기의 가상공간을 할당한다.
리눅스는 이 중에서 0~3GB의 공간을 사용자 공간으로 사용하고 나머지 3~4GB를 커널 공간으로 사용한다 (64bit 경우 264=16EB크기의 가상 공간중 약 128TB의 공간을 사용자 공간으로 사용한다)
위의 그림은 유저모드 프로세스의 가상 주소 공간을 나타낸다.
사용자 프로그램중 명령,함수 등으로 구성되는 텍스크 영역은 프로세스의 주소공간 중 가장 하위 공간을 차지한다
함수의 로컬변수,파라미터,리턴 주소,등을 담는 스택 영역은 유저 공간과 커널 공간의 경계 위치부터 아래 방향으로 공간을 차지한다.
즉 스택은 함수를 호출 할 때 인자나 호출된 함수의 지역 변수를 저장하기 위하여 아래 방향으로 크기가 커진다
한편 프로세스는 수행 중에 malloc/free 등의 함수를 사용하여 동적으로 메모리 공간을 할당 받을 수 있다. 이때 메모리가 할당되는 공간을 힙 영역이라고 부르며 힙은 데이터 영역의 다음 부분을 차지한다
힙은 아래에서 위쪽 방향으로 사용한다
결국 프로세스는 크게 텍스트,스택,힙,데이터라는 4 영역으로 구분할수 있다
텍스트 영역에는 CPU에서 직접 수행되는 기계명령어,데이터 영역에는 전역변수가 들어있다.
프로세스는 어떻게 생성되나?
fork(),Vfork() 시스템 콜을 통해서 생성한다.
프로세스는 부모 자식관계를 성립하는데 자식 프로세스와 부모 프로세스는 서로 다른 가상 주소 공간을
사용하므로 서로의 프로세스에는 영향을 주지 않게된다.
그런데 만약 쓰레드 생성이였다면 어떠할까?
자식 쓰레드와 부모 쓰레드는 서로 같은 주소 공간을 공유한다.
같은 프로세스에서 새로운 쓰레드를 생성할 경우 기존 쓰레드와 생성된 쓰레드가 함께 동작하고 있는 것으로 볼 수 있다.만약 자식 쓰레드에서 결함이 발생하면 부모 쓰레드에게도 영향을 끼치게 된다.
반면 자식 프로세스에서 발생한 결함은 부모 프로세스에게 영향을 끼치기 않는다.
=> 결국 쓰레드 모델은 자원공유에 적합하며, 프로세스 모델은 결함 고립에 적합한 모델이다
'개발 관련 책 읽기 > 리눅스 커널 내부구조' 카테고리의 다른 글
Chapter 4 - 메모리 관리(1) (0) | 2022.09.19 |
---|---|
Chapter 3 - 태스크 관리(4) (0) | 2022.09.19 |
Chapter 3 - 태스크 관리(3) (0) | 2022.09.19 |
Chapter 3 - 태스크 관리(2) (0) | 2022.09.19 |
Chapter 0 - 운영체제란 (0) | 2022.09.19 |