Linux 커널에서 프로세스 관리와 메모리 관리는 어떻게 사용됩니까? [폐쇄]

Linux 커널에서 프로세스 관리와 메모리 관리는 어떻게 사용됩니까? [폐쇄]

리눅스 커널 하위 시스템

~에 따르면Linux 커널 분석Linux 커널에는 프로세스 관리, 메모리 관리, 네트워크, VFS 및 장치의 5가지 하위 시스템이 있습니다.

그 중 두 가지는 필수적입니다: 1. 프로세스 관리 2. 메모리 관리

네트워킹, VFS, 장치를 처리하는 데 기본 Linux 커널 하위 시스템이 사용됩니까?

Linux 커널에서 프로세스 관리와 메모리 관리의 목적은 무엇입니까?

또한 다른 Linux 커널 하위 시스템(예: 프로세스 관리 및 메모리 관리)과 함께 존재하는 Linux 커널 하위 시스템(VFS, 네트워킹, 장치)의 목적을 찾으려고 노력하고 있습니다.

VFS, 네트워크 및 장치가 프로세스 관리 및 메모리 관리에 의해 처리된다면 VFS, 네트워크 및 장치를 Linux 커널의 하위 시스템으로 취급하는 것이 논리적입니까?

사용자가 사용자 공간에서 프로그램을 실행하면 프로세스 관리와 메모리 관리가 작동합니다. 이 프로그램에는 VFS나 네트워킹 또는 장치와 관련된 내용이 포함될 수 있습니까?

프로세스 관리 및 메모리 관리는 다른 Linux 커널 하위 시스템에서 어떻게 작동합니까?

답변1

참고: "프로세스 관리"라는 용어는 Linux 커널에서 공식적으로 정의되거나 사용되지 않습니다. "프로세스 관리"를 생각하는 것은 괜찮지만 그것이 정확히 무엇을 포함하는지에 대해서는 사람들이 동의하지 않을 수 있습니다.

이 대답은 여러분이 찾아야 할 몇 가지 일반적인 정의와 키워드를 제공하고 싶기 때문에 약간 복잡합니다. 안타깝게도 일부 단어는 장소에 따라 다른 의미를 갖습니다.

주의 깊게 읽고 각 단어의 사용법을 적극적으로 다시 확인하십시오. 글을 작성할 때 몇 가지 배경 정보를 제공하십시오. 모든 사람이 똑같은 정의를 사용한다고 가정하지 마십시오.

언제나 그렇듯이 이 답변은 단순화된 것입니다 :-).

"공정 관리

컴퓨터에는 코드를 실행하기 위한 프로세서, 즉 "CPU"가 있습니다. 귀하의 컴퓨터에는 아마도 2개의 CPU가 있을 것입니다. Linux CPU 스케줄러는 보다 유용한 개념을 제공하기 위해 CPU를 관리합니다.임의의 숫자"프로세스"를 실행하거나 "스레드"를 실행합니다. 스케줄러는 스레드 간 전환을 강제합니다. 초당 여러 번 전환합니다.

또한 스케줄러는 스레드를 다른 CPU에 할당해야 하는지 여부를 주기적으로 고려합니다. 즉, 각 CPU에 할당된 스레드 수의 "균형"을 조정합니다.

전통적으로 CPU 스케줄러는 "프로세스 스케줄러"라고도 불렸습니다. 그러나 그 당시에는 사용자 수준 프로세스당 실행 스레드가 하나만 있었습니다. 오늘날 UNIX 프로세스에는 많은 스레드가 있을 수 있습니다. 커널 내에서는 간단히 "스케줄러"라고 부르는 것이 일반적입니다.

스케줄러는 "작업"이라는 단어를 사용하여 커널 스레드 개념을 나타냅니다. 그럼에도 불구하고 커널은 종종 "작업"(스레드)을 의미하기 위해 "프로세스"를 사용합니다. 차이점이 중요한 경우에는 맥락을 다시 확인하고 혼동하지 않도록 노력해야 합니다. :-).

의 코어 스케줄링 알고리즘은 kernel/sched/사용하는 CPU 제품군(CPU "아키텍처")에 의존하지 않습니다. 프로세스 간 전환에 대한 세부 사항은 에 있는 아치 관련 코드로 처리됩니다 arch/*/.

프로세스 관리의 또 다른 측면은 프로세스가 이벤트를 기다리는 경우입니다. 예를 들어, 프로세스가 장치에서 데이터를 읽기 위해 시스템 호출을 수행할 때 데이터가 준비되면 장치가 신호(인터럽트 신호)를 보낼 때까지 기다려야 할 수 있습니다. 그때까지 해당 프로세스는 실행 대기열에서 제거되고 다른 프로세스는 CPU에서 예약될 수 있습니다.

메모리 관리

다시 한번 말하지만, 하드웨어를 먼저 고려하십시오: 물리적 RAM. 하드웨어는 다음과 같은 부분으로 구성된 메모리를 제공합니다.바이트. 각 바이트에는 숫자 주소가 있으며 개별적으로 액세스할 수 있습니다. 귀하의 컴퓨터에는 대략 1,000,000,000바이트의 RAM이 있을 것입니다.

하나Linux 메모리 관리의 한 가지 측면은 각 사용자 프로세스에 자체 가상 메모리를 제공하는 것입니다. 우리는 다시 하드웨어 리소스를 나누고 그 중 일부를 다른 목적에 할당합니다. 일을 더욱 즐겁게 만드는 새로운 개념을 제공하는 것이 목표입니다.

가상 메모리가 왜 그렇게 유용한지 이해하려면 가상 메모리가 없으면 어떤 일이 일어날지 생각해 보세요. 모든 프로세스는 전체 물리적 메모리에 접근할 수 있습니다. 이는 실행 중인 프로그램에 단순한 버그가 있거나 악의적인 경우 전체 시스템이 손상될 수 있음을 의미합니다.

원래 UNIX에 가상 메모리를 추가하면 시스템이 더욱 강력해졌습니다. 메모리 보호 및강요된위의 작업 전환("선점형" 멀티태스킹이라고도 함) 선점형 멀티태스킹은 하나의 사용자 프로세스가 유일한 CPU에서 연속 루프로 실행되는 경우 시스템에서 다른 프로세스가 계속 실행되어 입력에 응답하도록 허용한다는 의미입니다.

위에서 언급한 것처럼 UNIX 프로세스에는 많은 스레드가 있을 수 있습니다. 그러나 프로세스 내부에서는 모든 스레드가 동일한 가상 메모리에 액세스합니다.

제가 UNIX 프로세스 개념을 언급하는 이유는 Linux 특정 기능이 기술적으로 다양한 가능한 조합을 허용할 수 있기 때문입니다. 추가 조합은 거의 사용되지 않습니다. Portable UNIX라는 개념으로 생각하시면 가장 좋습니다.

하드웨어 세부 사항은 어떻습니까?메모리 관리 유닛아키텍처별 코드에서 가상 메모리 처리를 지원합니다. 그러나 그 안에는 여전히 mm/모든 CPU 아키텍처에서 사용되는 많은 메모리 관리 코드가 있습니다 .

스케줄러 코드와 VM 코드 사이에 일부 협력이 있음을 알 수 있습니다! 커널이 CPU를 다른 실행 스레드로 전환할 때 스레드가 올바른 가상 메모리 공간에서 실행되도록 관련 MMU를 업데이트해야 합니다.


사용자가 사용자 공간에서 프로그램을 실행하면 프로세스 관리와 메모리 관리가 작동합니다. 이 프로그램에는 VFS나 네트워킹 또는 장치와 관련된 내용이 포함될 수 있습니까?

전반적으로 "그렇다"입니다. 가장 정확하고 유용한 대답은 "예"입니다.

열려 있는()VFS( )에 대한 시스템 호출입니다 fs/. 호출 프로세스에 "파일 설명자"를 반환합니다. 그것은 단지 숫자일 뿐입니다. 각 프로세스에 대해 커널은 열린 파일 테이블을 유지합니다. 예를 들어 전화할 때폐쇄(), 파일 설명자를 전달하면 커널이 테이블에서 이를 찾습니다.

소유한 테이블을 탐색하고 있다고 말할 수 있으므로 task_struct실제로 VFS에 직접 액세스하는 대신 "프로세스 관리"를 진행하고 있습니다. 그러나 나는 동의하지 않습니다. 그리고 다음에 정의된 시스템 open()호출close()파일 시스템/open.c. 숫자로 된 파일 설명자를 사용하여 호출되며 자체적으로 검색해야 합니다.

전달하는 파일 이름은 open()아마도 장치 노드일 것입니다. 이 경우 반환된 파일 설명자( 포함)에 대한 작업은 궁극적으로 close()장치 드라이버( )와 drivers/통신합니다 .

네트워크 연결은 파일 설명자로도 표시됩니다. 대부분의 경우 파일 설명자는 open()파일 시스템의 경로를 통해 얻지 않습니다. socket()대신 사용됩니다. (커널 소스 코드 디렉토리 net/:)

관련 정보