어서 오세요
이번 시간에는 부모 과정과 자녀 과정의 관계에 대해 알아보겠습니다
파일 설명도요
부모 프로세스가 포크 전후로 파일 몇 개를 열었다고 해보죠
부모 프로세스가 자식 프로세스를 포괄한다면 자식 프로세스와 부모 프로세스
사이의 관계를 보죠 파일 테이블에 관해서요
앞서 말씀드린 것처럼 포크를 할 때마다 혹은 부모 프로세스가 포크를 할 때마다 자식 프로세스를
생성하고 부모 프로세스의 가상 메모리는 모두 자식 프로세스로 복사되죠
그래서요?
부모 프로세스에서 파일이 열리면 부모 프로세스는 파일 묘역 테이블을 갖죠
지난 비디오 강의에서 다뤘던 내용인데요
프로세스에서 파일이 열릴 때마다 파일 설명표 표가 생겨요
절차에 근거해서요
모든 프로세스는 고유한 파일 설명표를 갖게 되죠
파일이 열려 있어요
테이블은 시스템으로 구성돼 있어요
파일이 열릴 때마다 파일 설명표는 그 파일의 설명표와 함께 업데이트되죠
열린 파일 테이블을 가리키죠
이 예제에서 log.txt 파일과 inode 테이블을 열었어요
로그.txt 파일의 입력을 포함하고 있어요
파일로그.txt를 열 때마다 나와요
그 과정에서 파일 설명 테이블에 항목이 있는데 파일 설명 테이블은 열린 파일 테이블을
가리키죠
오픈 파일 테이블은 파일 오프셋이 무엇인지와 같은 오픈 파일의 정보를 담고 있습니다
파일이 열릴 때 플래그의 플래그 상태가 무엇인지도요 inode 테이블에
대한 포인터도 있는데 파일을 가리키죠
포크 전의 시나리오예요
이제 부모 프로세스가 fork를 호출하면 어떻게 되는지 보죠
이게 바로 도표예요
상반신을 보면 이 도표와 똑같아요
이 시나리오는 포크 전 시나리오예요
포크 다음에 일어나는 일은 이 파일 설명표도 하위 프로세스에서처럼 복사되죠
이제 하위 프로세스 파일 묘역 테이블도 부모 프로세스에 의해 열린 동일한 오픈
파일을 포함하고 있어요
부모 프로세스에서 파일이 열렸다고 해보죠
FD는 어떤 값과 같죠
그리고 파일을 가리키죠 열기 파일 테이블에서요
포크 후에 같은 것이 중복되죠
하위 프로세스에는 파일 설명표도 있어요
둘 다 동일한 오픈 파일 테이블 파일을 가리키죠
이 다이어그램으로 돌아가보죠
이제 한 자녀 프로세스의 한 프로세스가 더 남았죠
하위 프로세스에는 파일 설명표도 있습니다 동일한 열린 파일
테이블을 가리키죠 항목이요
부모 과정이 바뀔 때마다 같은 변화가 자식 과정에도 반영되죠
부모 프로세스가 라섹을 할 때 100바이트의 파일 오프셋을 가지고 있다고 해보죠
이 100바이트는 하위 자식 프로세스에 반영되기도 하죠
이 시나리오에서 이게 부모 프로세스라면 공통 파일에서 lseek을 합니다 100바이트의
오프셋이 있다고 해보죠
100바이트의 오프셋은 하위 프로세스에서도 볼 수 있어요
그래서 아이와 부모가 공유하는 파일 표에 비슷한 파일 묘사를 추가하죠
사실 파일 설명표의 사본은 하위 프로세스의 부모 프로세스와 같아요
둘 다 동일한 오픈 파일 테이블을 가리키죠
그럼 이제 개념을 슬라이드로 돌아가 보죠
이제 포크가 실행될 때마다 자식은 부모 파일 설명서의 중복을 받는다고 말할
수 있죠
부모와 자녀가 같은 파일 묘사를 언급한다는 뜻이기도
하죠
오픈 파일 설명은 부모 파일 오프셋을 포함합니다 읽기, 쓰기, 쓰기, 시크에 의해 수정될 것이죠
어떤 프로세스든 읽기, 쓰기, 라섹으로 파일을 수정하면 오픈 파일 테이블에 있는
게 뭐든 오프셋은 프로세스 양쪽에 반영돼요
그 결과 오픈 파일의 특성은 자식과 부모 프로세스 간에 공유되죠
이제 프로세스 테이블과 프로세스 컨트롤 보드 블록의 개념을 보죠
그래서 처음에 논의할 때 우리는 유아 프로세스가 나올 때마다 프로세스 테이블의 입구가
있다고 했죠
이게 프로세스 테이블입니다 프로세스 테이블에는 PID가 있는데 프로세스
ID를 뜻하죠
프로세스 컨트롤 블록이라는 필드가 하나 더 있어요
이 프로세스 컨트롤 블록은 프로세스 컨트롤 블록이라 불리는 데이터 구조를 가리키죠
이 프로세스 컨트롤 블록은 프로세스 중에서도 독특해요
모든 프로세스에는 프로세스 컨트롤 블록이 있어요
프로세스 컨트롤 블록은 필드가 적어요
기본적으로 프로세스 컨트롤 블록은 데이터 구조예요
이 프로세스 컨트롤 블록은 모든 프로세스에 존재해요
프로세스 컨트롤 블록의 내용을 보죠
프로세스 컨트롤 블록은 각 프로세스의 데이터 구조일 뿐이죠
프로세스 컨트롤 블록의 많은 데이터 멤버가 있어요
몇 개 살펴볼게요
프로그램 카운터라는 게 있어요 프로세스 넘버, PID죠
절차 상태요
CPU 등록, 프로세스 우선순위 메모리 관리 정보, 그리고 몇몇 오픈 파일 프로세스 목록이
있네요
다른 요소도 많아요
어디 보죠
왜 프로세스 컨트롤 블록이 필요한지∙∙∙ 앞서 얘기했듯이 Linux는 다중 처리 시스템이죠
Linux 시스템에서 실행되는 프로세스가 많아요
프로세스의 CPU 시간이 끝날 때마다 스케쥴러는 큐에서 다른 프로세스를 스케쥴링하죠
그런 행동을 하는 예전 과정이 다시 시작되면 멈췄던 상태로 다시
시작해야 해요
CPU를 떠나기 전에 모든 프로세스 상태를 저장해야 하죠
프로세스의 다른 상태는 어떤 지시에 따라 실행되는지와 같아요
프로그램 카운터가 여기 있어야 해요
그런 다음 프로세스 상태를 저장해야 하죠
절차는 어떤지 같은 거요 실행 중인 주인지 대기 중인 주인지요
프로세스 상태를 저장해야 합니다 CPU 등록기는 CPU 등록기의 현재 값을 저장합니다 프로세스가
재개되면 저장된 CPU 등록기를 다시 CPU 등록기로 로드합니다 그리고 작업을
수행하고 프로세스 우선순위를 수행합니다 저장 프로세스 우선 순위처럼요
여긴 다른 들판이에요
다른 분야도 많지만 중요한 분야는 몇 개 안 돼요
Linux의 프로세스 컨트롤 블록은 데이터 구조에 의해 참조됩니다 작업 밑줄 쉼터라고
하죠
이건 Linux의 프로세스 컨트롤 블록을 나타내죠
이 작업 스트럭트는 거대한 데이터 구조예요
각 프로세스는 각각의 프로세스 혹은 리눅스의 각 스레드는 자체적인 작업 스트럭트가 있어요