핵심 부분: CPU, 메모리
제어 장치: 전체 CPU의 명령 및 제어 센터
산술 단위: 계산기 코어, 산술 연산 및 논리 연산을 수행합니다. 연산 장치는 제어 장치로부터 명령을 받아 작업을 실행합니다.
저장 장치: CPU 온칩 캐시 캐시 및 등록 그룹
실행 효율성을 높이고 CPU와 메모리 간의 상호 작용(상호 작용이 CPU 효율성에 영향을 줌)을 줄이기 위해 최신 CPU는 일반적으로 CPU에 다중 레벨 캐시 아키텍처를 통합합니다. 가장 일반적인 것은 3단계입니다. 캐시 구조
L1 캐시는 데이터 캐시와 명령어 캐시, 논리 코어 독점
L2 캐시, 물리 코어 독점, 논리 코어 공유
L3 캐시, 모든 물리 코어 공유
이 머신의 3단계 캐시 아키텍처는 다음과 같습니다. L1 캐시는 명령어 저장 단위(저장 명령어)와 논리적 저장 단위(저장 논리)의 두 가지 유형으로 구분됩니다. 이론적으로 머신에는 슬롯에 따라 여러 개의 CPU가 있을 수 있으며, CPU에는 여러 개의 코어가 있을 수 있고, 코어에는 여러 개의 논리 프로세서가 있을 수 있습니다.
Register는 CPU의 내부 구성 요소이며 읽기 및 쓰기 속도가 매우 빠릅니다. CPU는 레지스터에서만 데이터를 읽습니다. 각 CPU에는 다른 CPU가 액세스할 수 없는 고유한 레지스터가 있습니다. 레지스터를 사용하면 CPU가 메모리에 액세스하는 횟수를 줄여 CPU의 작업 속도를 높일 수 있습니다.
CPU에 가까울수록 읽기 속도가 빨라집니다 무어의 법칙에 따르면 CPU는 18개월마다 두 배의 속도로 발전하는 반면 메모리와 하드 디스크의 발전 속도는 따라잡을 수 없습니다. CPU 컴퓨팅 속도와 IO 속도 간의 불일치 문제를 해결하기 위해 CPU에는 소량의 캐시 Lx 캐시가 내장되기 시작했습니다(CPU 공간이 제한되고 저장 요소의 크기가 제한됨).
CPU 읽기 메모리 데이터 프로세스:
- 메모리 저장 공간 크기: 메모리 > L3 캐시 > L1 캐시 > 레지스터
메모리 읽기 속도: 레지스터 > L1 캐시 > L3 캐시 > 메모리
- 캐시 라인(CacheLine)
캐시는 가장 작은 저장 블록으로 구성됩니다---
- . 캐시 라인 크기는 일반적으로 64바이트입니다. 내 컴퓨터 L1의 캐시 크기는 512K이며 512 * 1024/64 캐시 라인으로 구성됩니다.
CPU는 레지스터에서만 직접 데이터를 얻을 수 있습니다. 데이터 x = 0이 메모리에 있다고 가정하면 해당 값 프로세스는 다음과 같습니다. 레지스터에 존재하는지 확인합니다.
존재하지 않으면 L1 캐시를 탐색하여 존재하지 않는지 확인합니다. 존재하면 L2 Cache를 순회합니다. L2 Cache에 없으면 L3 Cache를 순회합니다. 중간 프로세스가 존재하는 경우 캐시 라인은 잠기고 레지스터에 도달할 때까지 상위 레벨로 복사됩니다. 캐시에서 찾을 수 없으면 메모리에서 검색됩니다. 먼저 메모리 컨트롤러에 버스 대역폭을 점유하도록 알리고, 메모리에 잠금을 알리고, 메모리 읽기 요청을 시작하고, 응답을 기다립니다. 응답 데이터를 L3 캐시에 복사합니다. 참고: CPU가 잠금 해제될 때까지 전체 프로세스가 잠겨 있습니다.지역성 원리: CPU가 저장 장치에 액세스할 때 데이터에 액세스하든 명령어에 액세스하든 연속적인 영역에 모이는 경향이 있습니다.
지역성 원칙에는 두 가지 유형이 있습니다.
1.2. CPU 작동 안전 수준
커널 모드
ring2
ring3사용자 모드
Linux 및 Windows에서는 ring0, ring3의 두 가지 수준만 사용합니다. 운영 체제의 내부 프로그램 지침은 일반적으로 링에서 실행됩니다. 0 수준, 운영 체제 이외의 타사 프로그램이 ring3 수준에서 실행됩니다. 타사 프로그램이 운영 체제의 내부 기능을 호출하려면 운영 보안 수준이 충분하지 않기 때문에 CPU 실행 상태를 전환해야 합니다. ring3에서 ring0으로 시스템 기능을 실행하여 스레드를 생성합니다. 스레드 차단 및 깨우기는 CPU가 실행 상태를 전환해야 하기 때문에 매우 힘든 작업입니다.
JVM 스레드 생성은 CPU 프로세스입니다.
1단계: 스레드를 생성하기 위해 CPU가 ring3에서 ring0으로 전환됩니다.
2단계: 생성이 완료된 후 CPU가 ring0에서 다시 ring3으로 전환됩니다
3단계: 스레드가 JVM 프로그램을 실행합니다
4단계: 스레드 실행이 완료된 후 스레드가 삭제되고 다시 ring0으로 전환됩니다.
5단계: 스레드가 삭제되고 다시 ring3으로 전환됩니다.
프로그램 운영의 안전한 격리와 안정성을 보장하기 위해 운영체제에는 두 가지 개념이 있습니다. 32비트 운영 체제의 4G 메모리 공간을 예로 들어 보겠습니다. 用户空间
与内核空间
사용자 코드와 커널 코드(즉, 사용자 공간)에서 참조할 수 있습니다. 노란색으로 표시된 선형 주소 는 커널 코드 ( 즉, 커널 공간 )를 통해서만 액세스할 수 있습니다.
프로세스와 스레드는usermode 또는 kernelmode에서만 실행될 수 있습니다. 사용자 프로그램은 사용자 모드에서 실행되는 반면 시스템 호출은 커널 모드에서 실행됩니다.
사용자 모드에서는 일반 스택(사용자 공간 스택)을 사용하고 커널 모드에서는 고정 크기 스택(커널 공간 스택, 일반적으로 메모리 페이지 크기)을 사용합니다. 즉, 각 프로세스와 스레드에는 실제로 두 개의 스택이 있습니다. , 각각사용자 모드 및 커널 모드에서 실행됩니다.
CPU 스케줄링의 기본 단위 스레드도 다음과 같이 나뉩니다.
커널 스레딩 모델(KLT): Java에서 사용되는 커널은 스레드의 상태 및 컨텍스트 정보를 저장하며 스레드 차단은 프로세스 차단을 유발합니다. 다중 프로세서 시스템에서는 여러 스레드가 여러 프로세서에서 병렬로 실행됩니다. 스레드의 생성, 스케줄링 및 관리는 커널에 의해 완료되며 효율성은 ULT보다 느리고 프로세스 작업보다 빠릅니다.
사용자 스레드 모델(ULT): 운영 체제 코어에 의존하지 않습니다. 이 애플리케이션은 사용자 스레드를 제어하기 위해 스레드를 생성, 동기화, 예약 및 관리하는 기능을 제공합니다. 사용자 모드/커널 모드 전환이 필요하지 않으며 속도가 빠릅니다. 커널은 ULT를 인식하지 못합니다. 스레드가 차단되면 프로세스(모든 스레드 포함)가 차단됩니다. 스레드에는 사용자 공간과 커널 공간에 각각 하나씩 두 개의 스택이 있습니다. 스레드를 차단하고 생성하고 종료하면 사용자 공간 스택을 버리고 커널 공간으로 전송한 다음 실행이 완료된 후 사용자 공간으로 전송합니다.
3. 프로세스 및 스레드프로세스:
운영 체제 리소스 할당의 가장 작은 단위예: Java 프로그램을 시작할 때 운영 체제는 여러 스레드를 포함할 수 있는 Java 프로세스를 생성합니다.
스레드:운영 체제에 의한 CPU 스케줄링의 가장 작은 단위 스레드는 카운터, 스택, 로컬 변수와 같은 고유한 속성을 가지며 공유 메모리 변수에 액세스할 수 있습니다. CPU는 이러한 스레드 사이를 고속으로 전환하므로 사용자는 이러한 스레드가 동시에 실행되고 있음(동시성)을 느낄 수 있습니다.
스레드 전환 위아래:실행 중인 이전 스레드의 중간 상태를 저장하고 다음 스레드 실행
Serial:
시간이 겹치지 않음, 이전 작업이 완료되지 않음, 다음 작업두 작업이 서로 간섭하지 않고 동시에 실행됩니다.
두 작업을 동시에 실행하면 서로 간섭됩니다. 포인트, 대체 실행은 하나만 실행됩니다
위 내용은 Java의 기본 운영 체제 및 동시성에 대한 기본 지식은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!