내가 아는 한, Linux 커널에서는
이 구조는
task_struct
프로세스가 아닌 경량 프로세스인 스레드를 나타냅니다.프로세스는 어떤 구조로도 표현되지 않고 동일한 스레드 그룹 ID를 공유하는 스레드 그룹으로 표현됩니다.
다음도 마찬가지다.운영 체제 개념옳은?
Linux는 시스템 호출을 사용하여 스레드를 생성하는 기능도 제공합니다
clone()
. 하지만,Linux는 프로세스와 스레드를 구분하지 않습니다.. 실제로,프로그램 내의 제어 흐름을 언급할 때 Linux는 "프로세스"나 "스레드" 대신 "작업"이라는 용어를 사용합니다.
무슨 뜻이에요?
감사해요.
답변1
Linux는 또한 clone() 시스템 호출을 사용하여 스레드를 생성하는 기능을 제공합니다. 그러나 Linux는 프로세스와 스레드를 구분하지 않습니다. 실제로 Linux에서는 프로그램 내의 제어 흐름을 언급할 때 "프로세스"나 "스레드" 대신 "작업"이라는 용어를 사용합니다.
실제 구현과 보이는 표면을 구별해야 합니다.
사용자(시스템 소프트웨어 개발자) 관점에서 보면 한 가지 큰 차이점이 있습니다. 스레드는 많은 공통 리소스(예: 메모리 맵(물론 스택 외에도 파일 설명자))를 공유합니다.
Linux 내부(경고: 부정확한 손 흔들기 인수)핵심1) 현재 가지고 있는 것을 사용하고 있습니다. 즉, 프로세스와 스레드에 대해 동일한 구조를 사용합니다. 여기서 단일 프로세스의 스레드에 대해서는 무언가를 복제하지 않고 단일 인스턴스(메모리 매핑 설명)를 참조합니다.
그래서 스레드나 프로세스를 직접적으로 표현하는 수준에서는 기본 구조는 크게 다르지 않고, 정보를 어떻게 처리하느냐가 문제이다.
당신은 또한 독서에 관심이 있을 수 있습니다Linux의 스레드는 프로세스로 구현됩니까?
1) 요즘 "Linux"는 대부분 전체 운영 체제를 의미하지만 실제로는 커널 자체일 뿐이라는 점을 기억하세요.
답변2
Linux 스레드는 별도의 프로세스로 구현되지만 다른 스레드와 동일한 주소 공간을 공유합니다. 기본적으로 명령에는 숨겨져 있지만 ps
플래그를 통해 볼 수 있습니다 -L
.
예를 들어:
% ps -fp 2642
UID PID PPID C STIME TTY TIME CMD
polkitd 2642 1 0 Dec09 ? 00:00:48 /usr/lib/polkit-1/polkitd --no-d
% ps -fLp 2642
UID PID PPID LWP C NLWP STIME TTY TIME CMD
polkitd 2642 1 2642 0 7 Dec09 ? 00:00:18 /usr/lib/polkit-1/pol
polkitd 2642 1 2680 0 7 Dec09 ? 00:00:00 /usr/lib/polkit-1/pol
polkitd 2642 1 2683 0 7 Dec09 ? 00:00:30 /usr/lib/polkit-1/pol
polkitd 2642 1 2685 0 7 Dec09 ? 00:00:00 /usr/lib/polkit-1/pol
polkitd 2642 1 2687 0 7 Dec09 ? 00:00:00 /usr/lib/polkit-1/pol
polkitd 2642 1 2688 0 7 Dec09 ? 00:00:00 /usr/lib/polkit-1/pol
polkitd 2642 1 2692 0 7 Dec09 ? 00:00:00 /usr/lib/polkit-1/pol
polkitd
실제로는 7개의 스레드로 구성되어 있음 을 알 수 있습니다 . 둘 다 프로세스 ID는 동일하지만 스레드 ID(LWP)가 다르지만 커널에서 서로 다른 프로세스이기 때문에 목록에 서로 다른 프로세스로 표시됩니다 ps
.
이는 제약 조건 등에 영향을 미칠 수 있습니다 ulimit
. RedHat 및 그 파생 제품의 일반적인 문제는 기본 PAM 구성이 프로세스를 제한한다는 것입니다.
% cat /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 4096
root soft nproc unlimited
대규모 Java 웹 애플리케이션에서는 프로세스 수가 이 제한을 초과하여 애플리케이션이 실패할 수 있습니다.