내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
컴퓨팅에 대한 필요성은 인류 역사상 널리 퍼져 있으며, 그 발전은 일반적으로 일반 컴퓨팅 도구에서 기계식 컴퓨터, 현재의 전자 컴퓨터에 이르는 개발 과정을 거쳤습니다.
컴퓨팅에 대한 인류의 요구는 우리가 지속적으로 컴퓨터를 발명하고 개선하도록 유도합니다. 현 시대는 "전자 컴퓨터"의 시대이며, 개발 추세는 더 빠르고, 더 안정적이며, 더 작습니다.
추천도서: "컴퓨터의 간략한 역사"
포인트 1
최신 컴퓨터는 대부분 다음을 준수합니다.폰 노이만 아키텍처
존 폰 노이만(John von Neumann, 1903년 12월 28일 - 1957년 2월 8일), 헝가리계 미국인 수학자이자 컴퓨터 과학자
과학자, 물리학자, 그리고 20세기의 가장 중요한 수학자 중 한 명입니다. 폰 노이만(Von Neumann)은 부다페스트 대학교에서 수학 박사 학위를 취득했으며, 현대 컴퓨터, 게임 이론, 핵무기 및 생물학 무기 분야에서 가장 다재다능한 과학자 중 한 명입니다. 현대 컴퓨터의 아버지", "게임 이론의 아버지".
다음으로, 처음부터 프로세스를 사용하여 CPU를 단계별로 구축합니다. 이 프로세스를 사용하여 CPU 및 메모리와 같은 컴퓨터의 주요 구성 요소의 작동 원리를 이해할 수 있습니다.
전자 스위치 - 기계식 계전기
전자 스위치를 통해서는 겉으로 보기에는 쓸모없어 보이는 1비트(bit) 논리 연산을 구현할 수 있지만, 적어도 작동은 하게 되는 거겠죠?
전자 스위치를 사용하여 정말 유용한 논리 구성요소를 결합하는 방법에 대해 자세히 알아봅니다.
미래 진공관과 트랜지스터의 본질은 유사한 작업을 완성하는 것이지만 물리적 원리는 더 복잡하기 때문에 자세한 설명은 생략하겠습니다.
다음으로, 전자 스위치를 사용하여 몇 가지 유용한 구성 요소를 만드는 방법, 즉 1비트의 기본 논리 연산을 구현하는 방법을 배웁니다.
ALU는 컴퓨터의 산술 및 논리 연산을 위한 핵심 구성 요소이며 컴퓨터의 수학적 두뇌입니다. 다음으로 우리는 위에서 구성된 논리 게이트를 사용하여 자체 ALU를 완성하고 작동 모드를 학습하고 이해합니다. 현대 컴퓨터 원리의 초석에 대한 우리의 이해를 더욱 발전시킵니다.
산술 단위는 4가지 산술 연산 등 컴퓨터의 모든 디지털 연산을 담당합니다. 물론 그보다 더 많은 일을 할 수 있습니다. 다음으로 8비트 가산기(adder)를 구현하는 방법을 보여 드리겠습니다. 전체 과정과 기타 작업에 대해서는 더 이상 설명하지 않겠습니다.
이 시점에서 우리는 처음부터 8비트 가산기를 만들었습니다. 물론 산술 장치의 연산은 논리 게이트를 계속 결합함으로써 더 많은 산술 연산을 수행할 수 있지만 가산기만으로도 충분합니다. 사실 곱셈과 나눗셈을 만드는 것이 덧셈과 뺄셈을 만드는 것보다 더 어렵습니다. 관심이 있다면 더 배워보세요.
논리 유닛은 주로 논리 연산을 수행하는 데 사용되며 가장 기본적인 연산은 AND, OR, NOT 연산이지만 단순한 1비트 숫자의 비교는 아닙니다.
经过我们的努力,通过基本的逻辑门电路,我们⼀步步地做出了⼀个 8 位(bits) ALU,甚至比 Intel 74181 还要强大,Intel 74181 只是⼀个 4 位(bits) ALU(😀)。当然现代的计算机中的 ALU 部件非常强大,复杂度远远超过了我们的想象,32 位 甚至 64 位基本已经普及全球了。但无论如何,再复杂的ALU 也是芯片工程师像我们这样,一层又一层, 一步又一步地将其抽象出来的。ALU 是第⼀次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰.
ALU만으로는 충분하지 않습니다. 따라서 ALU에 대한 스토리지 구성 요소를 제공할 수 없으므로 다음으로 게이트 회로를 사용하여 스토리지 생산을 간략하게 설명합니다. 그림에는 명확하게 표시되어 있지 않지만 이러한 스토리지 요구 사항은 전원이 켜져 있어야 합니다. 즉, 이러한 저장소는 휘발성입니다(휘발성).
일부 구현 세부 사항을 중간에 숨기면 최종 효과는 다음과 같습니다. 비활성화 라인이 설정되면 입력이 1이 되고, 입력이 0이면 0이 저장됩니다. , 쓰기가 유효하지 않습니다.
우리는 도어록을 사용하여 필요한 레지스터와 메모리를 구축할 수 있습니다.
기억의 구성은 이보다 조금 더 복잡하지만 기본 원리는 동일합니다. 이렇게 구성된 메모리를 RAM(Random Access Memory)이라고 하며 어떤 위치에서든 데이터에 액세스하는 데 O(1) 시간 복잡도를 지원할 수 있습니다. 이는 배열 첨자 액세스 작업이 O(1)임을 의미합니다.
하드웨어 지원.
이제 ALU와 스토리지가 있지만 컴퓨터가 작동하기에는 아직 충분하지 않습니다. ALU가 어떤 종류의 계산을 수행하도록 지시하는 구성 요소가 필요하며 이 구성 요소가 제어 장치(CU)입니다.
포인트 2
위 사진의 박스 수는 코어 수라고 생각하면 됩니다. 사진에서 보는 바와 같이 16코어 CPU입니다.
초기 CPU에는 단일 코어가 있었습니다. 시대가 발전함에 따라 CPU 처리 속도에 대한 요구 사항이 점점 더 높아졌습니다. 이때 더 빠른 계산을 위해 CPU를 더 통합하고 더 많은 컴퓨팅 장치를 포함해야 합니다. 컴퓨팅 단위가 작아집니다(5nm 등의 CPU 제조 공정). 이때 고전 역학은 무효화되고 양자 역학 분야에 진입하기 시작합니다.
이때 멀티코어 개념이 제안된다.
CPU의 컴퓨팅 속도는 주파수로 표현되는데, 이는 단순히 1초에 몇 개의 명령을 실행할 수 있는지(엄격하지는 않음)로 이해될 수 있습니다. 예를 들어, 위의 속도는 초당 약 34억 번의 CPU 계산으로 이해될 수 있습니다. .
CPU의 주파수는 작업 부하에 따라 동적으로 변경됩니다. 주파수가 증가하면 과열로 인한 CPU 연소를 방지하기 위해 더 많은 전력을 소비하고 더 많은 열이 발생합니다.
포인트 3
먼저 우리에게 필요한 지침을 소개하겠습니다.
소위 명령어, 즉 CPU에 작업을 수행하도록 지시하는 명령은 주로 연산 코드 + 피연산자로 구성됩니다.
Opcode는 수행할 작업을 나타내는 데 사용되며 피연산자는 이 명령어에 의해 연산될 데이터(메모리 주소 또는 레지스터 번호 등)입니다.
명령어 자체도 숫자이며 특정 메모리 영역에 이진 형식으로 저장됩니다.
우리가 프로그래밍 언어로 작성한 프로그램은 결국 "CPU에서 실행되는 바이너리 명령어"로 변환되어야 합니다. 명령어는 CPU가 완료하는 작업의 기본 단위입니다.
명령어도 기계어(바이너리)이고 어셈블리 언어입니다.
서로 다른 CPU는 x86 명령어 및 arm 명령어와 같이 마이크로 수준에서 서로 다른 명령어를 지원하므로 호환성 문제가 발생합니다.
CPU가 실행할 수 있는 명령은 CPU가 처음 설계될 때 규정된 것으로 간주할 수 있습니다. 위 그림에는 몇 가지 간단한 명령이 나열되어 있습니다.
8비트 명령어는 두 부분으로 나눌 수 있습니다.
처음 4비트는 명령어가 수행하는 작업을 나타내는 연산 코드(opcode)입니다.
마지막 4비트는 피연산자입니다(매개변수와 유사).
위 표의 레지스터 이름 AB는 가상입니다. 실제 CPU 레지스터의 이름은 eax, ebx, esp, ebp...)입니다.
CPU에는 "프로그램 카운터"(exe가 메모리에 로드된 후 시스템에 의해 자동으로 설정됨)라는 특수 레지스터가 있으며, 동시에 명령이 다음에 실행될 메모리 위치를 저장합니다. 시간에 따라 명령이 실행됨에 따라 "프로그램 카운터"의 값도 업데이트됩니다. 기본적으로 점프 문이 발생하면 +1의 자동 증가 프로세스입니다. (if, while, for, 함수 호출...)과 같이 다른 값으로 설정됩니다.
명령 실행을 세 단계로 나눕니다.
1) 명령어 가져오기, CPU는 명령어 내용을 메모리에서 CPU로 읽습니다. (읽은 명령어를 저장하는 특수 레지스터가 있습니다.)
2) 명령어를 분석하고 해당 기능, 해당 기능 및 피연산자를 식별합니다.
3) 지시사항 실행
각 명령의 실행은 위의 세 단계를 거쳐야 하며 작업을 완료하려면 위의 여러 명령을 실행해야 합니다. 예를 들어 추가 프로세스에는 위의 세 가지 명령이 필요할 수 있는데 이는 매우 번거로워 보이지만 CPU 계산으로 인해 발생합니다. 매우 빠르며(위의 작업은 1초에 10억 번 이상 수행될 수 있음) 컴퓨터에서는 많은 시간이 걸리지 않습니다.
소위 프로그램은 일련의 명령어와 이 명령어 세트에 의해 처리되는 데이터입니다. 좁은 의미에서 프로그램은 일반적으로 파일 세트로 나타납니다.
프로그램 = 명령어 + 명령어가 처리할 데이터.
이것은 이전에 유포되었던 흥미로운 작은 이야기이지만, 물론 그것은 사실이 아닙니다.그러나 초기 컴퓨터의 경우 프로그래밍이 실제로 필요했습니다.
0과 1로 프로그래밍됨(Σ(в°Д °;)ught)
아래 그림은 최초의 마이크로컴퓨터 중 하나인 Altair 8800 컴퓨터를 보여줍니다. 사용자는 스위치를 제어하고 프로그램을 조금씩 컴퓨터에 입력해야 합니다.
모든 컴퓨터 사용자가 바이너리 프로그래밍을 사용해야 한다면 모든 사람이 미쳐버릴 것입니다. 이는 너무 높은 임계값입니다. 그래서 프로그래밍 언어가 탄생했습니다.
프로그래밍 효율성을 높이기 위해 어셈블리 언어라는 개념이 처음 만들어졌습니다. 사실 어셈블리어와 기계어(즉, 명령어)는 일대일 대응 관계에 있는데, 단지 숫자 0과 1을 기준으로 인간이 이를 기억하고 이해할 수 있도록 돕기 위해 몇 가지 기호가 만들어졌을 뿐입니다. 위에서 본 내용은 LOAD_A, LOAD_B 등과 유사합니다. 프로그래머는 프로그래밍을 마친 후 어셈블리 언어를 기계어로 번역하기 위해 어셈블러를 사용해야 합니다.
조립은 프로그래머의 메모리 비용을 줄여주지만 컴퓨터 하드웨어에 대한 모든 지식을 습득하려면 여전히 프로그램이 필요합니다. 컴퓨터 제조업체의 수가 증가함에 따라 한 번에 작성된 프로그램은 한 가지 유형의 컴퓨터에만 적합한 경우가 많습니다. 이것으로는 충분하지 않기 때문에 고급 언어가 하드웨어 세부 사항을 보호하고 프로그래머가 더 높은 수준에서 비즈니스에 대해 생각할 수 있도록 해줍니다. 여기서는 C 언어를 예로 들어 보겠습니다. 프로그래머가 프로그램 작성을 마친 후에는 컴파일러와 링커를 사용하여 프로그램을 어셈블리 언어로 번역한 다음 어셈블러를 사용하여 이를 최종 기계어로 바꿔야 합니다.
캡슐화 아이디어의 도움으로 프로그래밍을 배우는 것이 점점 더 쉬워집니다. 그러나 장점과 단점도 있습니다. 높은 수준의 추상화로 인해 많은 프로그래머는 컴퓨터를 블랙박스로 간주하고 자신의 프로그램이 어떻게 작동하는지 전혀 이해하지 못합니다. 우리 중 누구도 그런 프로그래머가 되지 않기를 바랍니다.
우리가 사용하는 Java 언어는 C 언어보다 조금 더 발전된 언어이지만 기본 추상 원리에는 큰 차이가 없으므로 지금은 자세히 설명하지 않겠습니다.
참고: 고급 언어로 된 명령문은 완료해야 할 많은 지침에 해당하는 경우가 많습니다.
포인트 4
운영체제(Operating System)는 컴퓨터 자원을 관리하는 소프트웨어 집합의 총칭이다. 현재 일반적인 운영 체제에는 Windows 시리즈, Unix 시리즈, Linux 시리즈, OSX 시리즈, Android 시리즈, iOS 시리즈, Hongmeng 등이 포함됩니다.
다른 시스템에서 실행되는 프로그램이 다릅니다(프로그램은 다른 kpi로 인해 호환되지 않습니다).
운영 체제에는 두 가지 기본 기능이 있습니다.
1) 시공간 애플리케이션에 의해 하드웨어가 남용되는 것을 방지합니다. 애플리케이션에 KPI를 제공하고 애플리케이션이 이를 호출하여 다양한 기능을 완료하도록 합니다.
2) 복잡하고 종종 서로 다른 하위 수준 하드웨어 장치를 제어할 수 있는 간단하고 일관된 메커니즘을 애플리케이션에 제공합니다.
운영 체제는 주로 다음 두 가지 작업을 수행합니다.
1) 다양한 하드웨어 장치를 관리합니다. 컴퓨터는 코드 스캐너, 의료 장비, B-초음파 기계 등 다양한 장치에 액세스할 수 있습니다.
2) 소프트웨어에 대한 안정적인 운영 환경을 제공합니다. 최신 운영 체제는 동시에 많은 프로그램을 실행해야 합니다. 한 프로그램에 버그가 발생하더라도 다른 프로그램에 영향을 주지 않기를 바랍니다. .
각 응용 프로그램이 최신 운영 체제에서 실행될 때 운영 체제는 마치 이 프로그램만 시스템에서 실행되고 모든 하드웨어 리소스가 이 프로그램에서 사용되는 것처럼 추상화를 제공합니다. 이러한 환상은 컴퓨터 과학에서 가장 중요하고 성공적인 개념 중 하나인 프로세스 개념을 추상화함으로써 달성됩니다.
프로세스는 운영 체제에서 실행 중인 프로그램을 추상화한 것입니다. 즉, 프로세스는 프로그램의 실행 프로세스로 간주될 수 있으며, 운영 체제 내에서는 프로세스가 자원 할당의 기본 단위입니다. 운영 체제에 의해.
포인트 5
프로세스는 컴퓨터에서 실행되는 일부 응용 프로그램입니다. (응용 프로그램에 대해 이야기할 때 두 가지 상태가 있습니다. 실행 중이 아닐 때는 하드 디스크에 있는 exe 파일이고, 실행 중일 때는 exe가 됩니다. 메모리에 로드되고 CPU는 내부 명령을 실행합니다.
프로세스는 운영체제가 자원을 할당하는 기본 단위이다.
포인트 6
시스템에는 프로세스가 많기 때문에 관리가 필요합니다.
1) Description은 프로세스의 다양한 속성을 구조체/클래스를 통해 표현합니다. (주류 시스템은 C/C++로 구현됩니다.)
2) 조직은 위의 여러 구조(설명)를 데이터 구조를 통해 연결하고, 나아가 다양한 추가, 삭제, 수정, 점검을 수행합니다...
예를 들어, Linux 운영 체제는 프로세스 정보를 설명하기 위해 "PCB"라는 구조를 사용합니다(PCB는 프로세스 제어 블록을 나타냄). 간단히 말해서 위에서 언급한 여러 PCB가 연결된 목록을 통해 함께 연결되어 프로세스(이중)를 생성합니다. -exe를 클릭하고 프로그램을 실행하는 것은 PCB 구조를 만드는 것과 같습니다. 프로세스를 파괴한다는 것은 연결 목록에서 PCB를 삭제하고 PCB 구조를 해제하는 것을 의미합니다. 프로세스 목록을 본다는 것은 연결 목록을 탐색하고 해당 정보를 순차적으로 표시하는 것을 의미합니다. .
PCB는 많은 속성을 포함하는 매우 복잡한 구조입니다. 아래에서 몇 가지 주요 정보를 살펴보겠습니다.
1.PID 프로세스 식별자
동시에 PID는 시스템의 여러 프로세스 중에서 고유하며 반복되지 않습니다. 시스템의 많은 내부 작업은 PID를 통해 해당 프로세스를 찾습니다.
2. 메모리 포인터(세트)
프로세스 종속 명령 및 데이터가 저장되는 영역을 설명합니다.
운영 체제는 exe를 실행할 때 exe의 명령과 데이터를 읽고 이를 메모리(메모리 주소)에 로드합니다.
측면에서 보면 프로세스를 실행하려면 특정 메모리 리소스가 필요하다는 것을 알 수 있습니다.
3. 파일 설명 테이블(시퀀스 테이블/어레이)
하드 디스크의 데이터에 해당하는 프로세스에서 열리는 파일을 설명합니다.
해당 프로세스에서 파일을 열면 쉽게 읽을 수 있도록 시퀀스 테이블에 항목이 추가됩니다.
다음 항목은 당사의 일상적인 개발과 밀접하게 관련된 프로세스 일정을 공동으로 결정합니다.
포인트 7
운영 체제 프로세스 스케줄링의 핵심시분할 다중화
현재 운영 체제는 모두 동시에 여러 프로세스를 실행할 수 있는 "멀티 작업 시스템"입니다. 이전 운영 체제는 "단일 작업 시스템"이라고 하며 동시에 하나의 프로세스만 실행할 수 있었습니다.
시분할 다중화에 대한 이해: 어느 순간 CPU는 프로세스 1을 실행하고, 잠시 실행하고, CPU는 프로세스 2를 실행하고, 잠시 후 프로세스 3을 실행하는데... CPU 연산 속도와 전환 속도가 매우 빠르기 때문에, 육안으로는 눈에 띄지 않습니다. 인간의 관점에서 보면 동시 실행, "동시 실행"과 같습니다.
병렬 실행: 이제 멀티 코어 CPU를 사용하면 각 코어와 코어 사이에서 미시적 수준에서 동시에 서로 다른 프로세스를 실행할 수도 있습니다.
동시성 또는 동시성은 운영 체제 커널에 의해 균일하게 예약되며 프로그래머/일반 사용자가 인식할 수 없습니다. 따라서 병렬성과 동시성을 일반적으로 집합적으로 "동시성"이라고 하며 해당 프로그래밍 기술을 "동시 프로그래밍"이라고도 합니다.
4. 처리현황
준비 상태: 언제든지 명령을 실행하도록 프로세스를 CPU에 예약할 수 있습니다.
차단된 상태: 프로세스가 CPU에서 명령을 실행하도록 예약할 수 없습니다. 차단된 이유는 IO 작업(하드 디스크 읽기 및 쓰기 또는 네트워크 카드 읽기 및 쓰기)과 같은 다른 작업을 수행해야 하기 때문입니다. 스캔 입력). 사용자 입력이 필요한 경우 프로세스는 차단 상태로 들어갑니다.)
위의 두 가지가 주요 두 가지 프로세스 상태이므로 다른 상태도 있으므로 자세히 설명하지 않겠습니다.
5. 처리 우선순위
우선순위는 말 그대로 프로세스의 순서입니다.
6. 프로세스 컨텍스트
시간 공유 다중화. 일정 기간 동안 프로세스가 실행된 후 CPU로 다시 전송됩니다. 이전 실행의 중간 결과(다양한 CPU 레지스터의 값)는 다음 번 사용을 위해 저장됩니다.
7. 프로세스의 회계 정보
우선순위 지원으로 다양한 프로세스에서 소비하는 리소스가 점점 더 달라질 수 있습니다.
위의 속성은 스케줄링 프로세스의 동시 실행을 지원하는 데 사용됩니다.
운영 체제는 공간 모델을 사용하여 메모리 리소스를 할당합니다. 즉, 서로 다른 프로세스는 서로 간섭하지 않고 서로 다른 메모리 영역을 사용합니다.
앞서 언급한 것처럼 프로세스는 운영체제가 자원을 할당하는 가장 작은 단위로, 각 프로세스가 서로의 존재감을 느낄 수 없다는 뜻이다. 이는 운영체제가 프로세스의 개념을 추상화하려는 의도다. 프로세스는 서로 "격리"되어 있습니다.
그러나 최신 애플리케이션은 프로세스를 통해 복잡한 비즈니스 요구 사항을 독립적으로 완료할 수 없는 경우가 많습니다. 이러한 방식으로 프로세스 간 "정보 교환"이 필요합니다. 프로세스 간 커뮤니케이션의 필요성은 역사적인 순간에 나타났습니다.
현재 Java에는 네트워크(소켓)를 통한 주요 프로세스 간 통신 방법이 하나만 있습니다.
네트워크는 동일한 호스트에 있는 두 프로세스 간의 통신을 지원하는 것 외에도 동일한 네트워크 내의 다른 호스트에 있는 프로세스 간의 통신도 지원하는 비교적 특별한 IPC 메커니즘입니다.