118
Визначення найменування і тактової частоти процесора
Лабораторная работа
Информатика, кибернетика и программирование
Дана лабораторна робота написана на мові Delphi 7 на тему Визначення найменування і тактової частоти процесора. Зміст роботи: Постановка задачі. Теоретичні відомості. Опис алгоритму. Керівництво програмісту. Керівництво користувачеві. Приклад роботи програми. Програмний код програми. Висновок про виконану роботу. Використана література, або інші джерела.
Украинкский
2012-11-14
632 KB
15 чел.
Зміст
11 питання зі списка лабораторних робіт по МЗКІТ -
« Визначення найменування і тактової частоти процесора ».
Центральний процесор (Central processing unit) функціональна частина ЕОМ, що призначена для інтерпретації команд.
Функції:
Архітектура процесора
Термін "архітектура процесора" в даний час не має однозначного тлумачення. З погляду програмістів, під архітектурою процесора мається на увазі його здатність виконувати певний набір машинних кодів. Більшість сучасних десктопних процесорів відносяться до сімейства x86, або Intel-сумісних процесорів архітектури IA32 (архітектура 32-бітових процесорів Intel). Її основа була закладена компанією Intel в процесорі i80386, проте в подальших поколіннях процесорів вона була доповнена і розширена як самою Intel (введені нові набори команд MMX, SSE, SSE2 і SSE3), так і сторонніми виробниками (набори команд EMMX, 3DNow! і Extended 3DNow!, розроблені компанією AMD).
Проте розробники комп'ютерного устаткування вкладають в поняття "Архітектура процесора" (іноді, щоб остаточно не заплутатися, використовується термін "мікроархітектура") дещо інший зміст. З їхнього погляду, архітектура процесора відображає основні принципи внутрішньої організації конкретних сімейств процесорів. Наприклад, архітектура процесорів Intel Pentium позначалася як Р5, процесорів Pentium II і Pentium III - Р6, а популярні в недавньому минулому Pentium 4 відносилися до архітектури NetBurst. Після того, як компанія Intel закрила архітектуру Р5 для сторонніх виробників, її основний конкурент - компанія AMD була вимушена розробити власну архітектуру - К7 для процесорів Athlon і Athlon XP, і К8 для Athlon 64.
Ядро:
В рамках однієї і тієї ж архітектури різні процесори можуть досить сильно відрізнятися один від одного. І відмінності ці утілюються в різноманітних процесорних ядрах, що володіють певним набором строго обумовлених характеристик. Найчастіше ці відмінності втілюються в різних частотах системної шини (FSB), розмірах кеша другого рівня, підтримці тих або інших нових систем команд або технологічних процесах, за якими виготовляються процесори. Нерідко зміна ядра в одному і тому ж сімействі процесорів спричиняє за собою заміну процесорного розніму (сокет, англ. socket), з чого витікають питання подальшої сумісності материнських плат. Проте в процесі вдосконалення ядра, виробникам доводиться вносити до нього незначні зміни, які не можуть претендувати на "ім'я власне". Такі зміни називаються ревізіями (англ. stepping) ядра і, найчастіше, позначаються цифробуквеннимі комбінаціями. Проте в нових ревізіях одного і того ж ядра можуть зустрічатися досить помітні нововведення. Так, компанія Intel ввела підтримку 64-бітової архітектури EM64T в окремі процесори сімейства Pentium 4 саме в процесі зміни ревізії.
32-бітові та 64-бітові процесори
Найуспішнішими і найпоширенішими донедавна були процесори з архітектурою IA32, яка була введена з появою покоління процесорів i80386 на заміну 16-бітним 8086, 80186, 80286.
Досить вдале 64-бітове розширення класичної 32-бітової архітектури IA32 було запропоноване в 2002 році компанією AMD (спочатку називалося x86-64, зараз - AMD64) в процесорах сімейства К8. Через деякий час компанією Intel було запропоновано власне позначення - EM64T (англ. Extended Memory 64-bit Technology). Але, незалежно від назви, суть нової архітектури одна і та ж: розрядність основних внутрішніх регістрів 64-бітових процесорів подвоїлася (з 32 до 64 біт), а 32-бітові команди x86-кода отримали 64-бітові аналоги. Крім того, за рахунок розширення розрядності шини адрес об'єм пам'яті, що адресується процесором, істотно збільшився.
Але ті, хто чекає від 64-бітових процесорів скільки-небудь істотного приросту швидкодії, будуть розчаровані їхня продуктивність в переважній більшості сучасних застосунків (які в масі своєю заточені під IA32) практично та ж, що і у старих добрих 32-бітових процесорів. Для пересічного користувача потенціал 64-бітової архітектури може розкритися, коли в масово з'являться застосунки, оптимізовані під нову архітектуру. Найефективніший перехід на 64-бітові процесори буде для програм, що активно працюють з великими об'ємами пам'яті, понад 4 ГБ: продуктивними серверами, базами даних, програм класу CAD/CAE, а також програм для роботи з цифровим контентом.
Багатоядерні процесори
Найзначнішою подією 2005 року стала поява дво'ядерних процесорів. До того часу класичні одноядерні CPU певною мірою вичерпали резерви зростання продуктивності за рахунок підвищення робочої частоти. Каменем спотикання стало не тільки дуже високе тепловиділення процесорів, що працюють на високих частотах, але і проблеми з їхньою стабільністю. Отже екстенсивний шлях розвитку процесорів вичерпався, і виробникам довелося освоювати новий, інтенсивний шлях підвищення продуктивності продукції. Піонером на ринку десктопних CPU, як зазвичай, стала компанія Intel, що першою анонсувала дво'ядерні процесори Intel Pentium D і Intel Extreme Edition. Втім, AMD з Athlon64 X2 відстала від конкурента буквально на лічені дні. Безперечним добутком цих дво'ядерників першого покоління є їхня повна сумісність з існуючими системними платами. Друге покоління двоядерних процесорів, зокрема, Intel Core 2 Duo, вимагає спеціально розроблених для них чіпсетів і зі старими материнськими платами не працює.
На сьогоднішній день для роботи з двоядернимі процесорами більш менш оптимізовано в основному професійне ПЗ (включаючи роботу з графікою, аудіо- і відео-даними), тоді як для офісного або домашнього користувача друге процесорне ядро іноді приносить користь, але частіше є мертвим вантажем. Але ринок неухильно рухається у бік мультиядерних систем і оптимізованих паралельних обчислень. Така тенденція буде пануючою найближчими роками, так що частка ПЗ, оптимізованого під декілька ядер, неухильно зростатиме, і дуже скоро може наступити момент, коли багатоядерність стане насущною необхідністю.
Будова
Внутрішні спільно працюючі пристрої
Моделі процесорів включають наступні спільно працюючі пристрої:
Пам'ять
Кеш першого рівня (L1 cache). Кеш-пам'ять, що знаходиться усередині процесора. Вона швидше всіх інших типів пам'яті, але менше за обсягом. Зберігає зовсім недавно використану інформацію, що може бути використана при виконанні коротких програмних циклів.
Кеш другого рівня (L2 cache). Також знаходиться усередині процесора. Інформація, що зберігається в ній, використовується рідше, ніж інформація, що зберігається в кеш-пам'яті першого рівня, проте за обсягом пам'яті він більший. Також у даний час у процесорах використовується кеш третього рівня.
Деякі важливі регістри мають свої назви, наприклад: суматор регістр АЛП, що бере участь у виконанні кожної операції. лічильник команд регістр УП, зміст якого відповідає адресі чергової виконуваної команди; служить для автоматичної вибірки програми з послідовних комірок пам'яті. регістр команд регістр УП для збереження коду команди на період часу, необхідний для її виконання. Частина його розрядів використовується для збереження коду операції, інші для збереження кодів адрес операндів.
Шини
Шина це канал пересилання даних, який використовується спільно різними блоками системи. Шина може являти собою набір провідних ліній у друкованій платі, проводу, припаяні до виводів роз'ємів, у які вставляються друковані плати, або плоский кабель. Інформація передається по шині у виді груп бітів. До складу шини для кожного біта слова може бути передбачена окрема лінія (паралельна шина), або всі біти слова можуть послідовно в часі використовувати одну лінію (послідовна шина).
Буфер цілей розгалуження
BTB(Branch Target Buffer). Це таблиця в якій знаходяться всі адреси, куди буде або може бути зроблений перехід.
3. Опис алгоритму.
Алгоритм function GetCPUCount
Алгоритм function GetCPUVendor
Алгоритм function GetCPUSpeed
procedure TForm1.FormActivate
procedure TForm1.Button1Click
procedure TForm1.Button2Click
procedure TForm1.Button3Click
4. Керівництво програмісту.
Програма складається с таких компонентів:
TForm1 = class(TForm) - головна форма, де розташовані компоненти.
Button1: TButton; - кнопка отримання інформації про ЦПУ.
Button2: TButton; - кнопка очищення компонентів Label1-Label10.
Button3: TButton; - кнопка виходу з програми.
Label1: TLabel; - мітка для виводу виробника ЦПУ.
Label2: TLabel; - мітка для виводу кількості ЦПУ.
Label3: TLabel; - мітка для виводу назви ЦПУ.
Label4: TLabel; - мітка для виводу швидкості ЦПУ.
Label5: TLabel; - додаткова мітка, для того, якщо в системі більше 1 ЦПУ
Label6: TLabel; - додаткова мітка, для того, якщо в системі більше 1 ЦПУ
Label7: TLabel; - додаткова мітка, для того, якщо в системі більше 1 ЦПУ
Label8: TLabel; - додаткова мітка, для того, якщо в системі більше 1 ЦПУ
Label9: TLabel; - додаткова мітка, для того, якщо в системі більше 1 ЦПУ
Label10: TLabel; - додаткова мітка, для того, якщо в системі більше 1 ЦПУ
Image1:TImage; - контейнер для малюнка, на який його можна розмістити
StaticText1:TStaticText; - мітка для виводу заголовка програми (розташована зверху)
StaticText2: TStaticText; - мітка для виводу автора програми (розташована внизу).
Модулі які використовуються в програмі:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry, jpeg, ExtCtrls;
Основні типи, які використовуються в програмі:
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Image1: TImage;
StaticText1: TStaticText;
StaticText2: TStaticText;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
Функція для визначення кількості ядер в ЦПУ:
function GetCPUCount: byte; // Функція повертає числове значення кількості ядер
var
si: TSystemInfo; // Обявлення змінної si типу TSystemInfo
begin // Початок функції
GetSystemInfo(si); // Системна функція, яка передає в змінну si значення про систему
Result := si.dwNumberOfProcessors; // функція повертає значення кількості ядер.
end;
Функція яка визначає виробника ЦПУ, використовується код Ассемблера.
function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX // Зберігається запис регістра
PUSH EDI
MOV EDI,EAX // Повертає значення типу TVendor
MOV EAX,0
DW $A20F // CPUID команда
MOV EAX,EBX
XCHG EBX,ECX // збереження результату ECX
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI // відновлюємо регістри
POP EBX
end;
function GetCPUSpeed: double; // Функція повертає значення в числовому значенні
const // Робимо обявлення констант
DelayTime = 500; // час вимірюється в мілісекундах
Var // Обявлення змінних
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10); // Робимо затримку програми на 10 мілісекунд
Asm // Вставка Асемблеровського коду
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
Asm // Вставка Асемблеровського коду
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;
Тіло програми:
Процедура при активації (запуску) программи:
procedure TForm1.FormActivate(Sender: TObject);
var // Обявлення змінних
i: integer; // Обявлення змінної і числового типу
begin
for i := 1 to 10 do // Через цикл очищаемо мітки
TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';
end;
Процедура обробки натиску на кнопку (Button1) :
procedure TForm1.Button1Click(Sender: TObject);
var // Обявлення змінних
CPUname: string;
Reg: TRegistry;
i, a: integer;
begin
Label1.Caption := 'Производитель: ' + GetCPUVendor; // Заносимо в мітку1
// інформацію про виробника використовуючи
// функцію GetCPUVendor, яку ми описали в
// глобальному розділі
Label2.Caption := 'Колличество CPU: ' + IntToStr(GetCPUCount); // Заносимо в мітку2
// інформацію про кількості
// ЦПУ використовуючи
// функцію GetCPUCount, яку ми описали в
// глобальному розділі
a := 3; // призначаємо змінній а числове значення «3»
CPUname := ''; // Очищаємо змінну CPUname
if (GetCPUCount) > 1 then // Початок умови якщо ядер в ЦПУ більше ніж 1
begin
for i := 1 to GetCPUCount do
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE; // занесення інформацію про реєстр
if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\'+
IntToStr(i), False)
// читаємо назву ЦПУ
then CPUname := Reg.ReadString('ProcessorNameString');
finally
Reg.Free;
end;
// Виводимо інформацію про ЦПУ
TLabel(FindComponent('Label'+IntToStr(a))).Caption :=
'Наименование ядра ' + IntToStr(i) + ' CPU: ' + CPUname;
inc(a);
// Виводимо інформацію про швидкість ЦПУ.
TLabel(FindComponent('Label'+IntToStr(a))).Caption := 'CPU speed' + IntToStr(i) + Format(': %f MHz', [GetCPUSpeed]);
inc(a);
end;
end
else // якщо наша умова (більше 1 ядра) не виконалась, тоді ЦПУ має 1 ядро і
// записуємо інформацію тільки як одноядрового ЦПУ.
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0', False) then
CPUname := Reg.ReadString('ProcessorNameString');
finally
Reg.Free;
end;
Label3.Caption := 'Наименование CPU: ' + CPUname;
Label4.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);
end;
end;
Процедура очищення міток, дія аналогічна, як процедури при запуску програми
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
for i := 1 to 10 do
TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';
end;
Процедура завершення програми:
procedure TForm1.Button3Click(Sender: TObject);
begin
Close; // Функція для закриття програми.
end;
5. Керівництво користувачеві.
Дана програма видає інформацію про ЦПУ, який встановлений в компютер:
Кнопка «Получить информацию» запускає програму, яка видасть інформацію про ЦПУ вашого компютера. На мал. обведена червоною лінією
Кнопка «Очистить окно» очищає дане вікно для повторного запуску кнопки «Получить информацию». На мал. обведена червоною лінією
Кнопка «Завершить програму » - закриває вікно програми, тип самим звільняючи область памяті, яку вона займала. На мал. обведена червоною лінією
6. Приклад роботи програми.
Запуск програми під різними компютерами, з різними ЦПУ.
1-ядровий ЦПУ
2-ядровий ЦПУ
4-ядровий ЦПУ
7. Програмний код програми.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry, jpeg, ExtCtrls;
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Image1: TImage;
StaticText1: TStaticText;
StaticText2: TStaticText;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function GetCPUCount: byte;
var
si: TSystemInfo;
begin
GetSystemInfo(si);
Result := si.dwNumberOfProcessors;
end;
function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {восстанавливаем регистры}
POP EBX
end;
function GetCPUSpeed: double;
const
DelayTime = 500; // время измерения в миллисекундах
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
var
i: integer;
begin
for i := 1 to 10 do
TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CPUname: string;
Reg: TRegistry;
i, a: integer;
begin
Label1.Caption := 'Производитель: ' + GetCPUVendor;
Label2.Caption := 'Колличество CPU: ' + IntToStr(GetCPUCount);
a := 3;
CPUname := '';
if (GetCPUCount) > 1 then
begin
for i := 1 to GetCPUCount do
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\'+IntToStr(i), False) then
CPUname := Reg.ReadString('ProcessorNameString');
finally
Reg.Free;
end;
TLabel(FindComponent('Label'+IntToStr(a))).Caption :=
'Наименование ядра ' + IntToStr(i) + ' CPU: ' + CPUname;
inc(a);
TLabel(FindComponent('Label'+IntToStr(a))).Caption := 'CPU speed' + IntToStr(i) +
Format(': %f MHz', [GetCPUSpeed]);
inc(a);
end;
end
else
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0', False) then
CPUname := Reg.ReadString('ProcessorNameString');
finally
Reg.Free;
end;
Label3.Caption := 'Наименование CPU: ' + CPUname;
Label4.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
for i := 1 to 10 do
TLabel(FindComponent('Label'+IntToStr(i))).Caption := '';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.
8. Висновок про виконану роботу.
З даної лабораторної роботи, я навчився дізнаватися інформацію про ЦПУ, також робити вставку кода Асемблера в мову Delphi. Розрахунок тактової частоти ЦПУ, хто являється виробником даного ЦПУ, а також модель і знаходження кількість ядер в даному ЦПУ.
9.Використана література, або інші джерела.
PAGE 22
А также другие работы, которые могут Вас заинтересовать | |||
38183. | Політичний потенціал забезпечення обороноздатності України | 119 KB | |
ОСНОВНА ЧАСТИНА: Чи можлива деполітизація армії Чи можливо на практиці ізолювати армію від політики Автор статті дотримується думки що армія як специфічний інститут держави відіграє важливу роль в політичній системі суспільства. Після розпаду СРСР в Україні та й не тільки виголошувалися заяви навіть на високому державному рівні про необхідність деполітизації армії. Але чи можливо на практиці ізолювати армію від політики У класичній військовій теорії тісний взаємозвязок політики і армії вже давно було науково встановлено. У самій... | |||
38184. | Воєнна організація держави | 162 KB | |
За роки незалежності відбулося становлення Воєнної організації України загалом. Військові формування можуть виконувати властиві їм функції. Структурні компоненти її продовжують розвиватись, щоб бути готовими відстояти суверенітет України на випадок серйозної воєнної загрози. | |||
38186. | ЗС України як юридична та політична система України | 229.5 KB | |
ЗС України як юридична та політична система України Заняття №1: ЗС України як юридична та політична система України Час: 4 години Мета заняття: формувати у курсантів риси необхідні військовому керівнику для професійної діяльності; сприяти розвитку почуття свідомої військової дисципліни відповідальності і... | |||
38187. | Сучасні геополітичні школи | 107.5 KB | |
Американець Сол Коен в книзі âГеографія і політика в поділеному світіâ запропонував ввести в геополітичний метод додаткову класифікацію що базується на діленні основних геополітичних реалій на âядраâ nuclens та â дисконтинуальні поясиâ. Розвиток геополітичних поглядів стосовно до âядерної епохиâ ми зустрічаємо у другого представника тієї ж американської школи Коліна Грея. У своїй книзі âГеополітика ядерної ериâ він дає нарис військової стратегії США НАТО в якому ставить планетарне розташування ядерних обєктів в... | |||
38188. | Глобалізація геополітики | 119.5 KB | |
Глобалізація геополітики Заняття №1: Глобалізація геополітики Час: 2 години Мета заняття: формувати у курсантів риси необхідні військовому керівнику для професійної діяльності; сприяти розвитку почуття свідомої військової дисципліни відповідальності і цілеспрямованості; формувати світогляд курсантів... | |||
38189. | Проблеми національної безпеки і конфлікти в постбіполярному світі | 227 KB | |
Проблеми національної безпеки і конфлікти в постбіполярному світі Заняття №1: Проблеми національної безпеки і конфлікти в постбіполярному світі Час: 2 години Мета заняття: формувати у курсантів риси необхідні військовому керівнику для професійної діяльності; сприяти розвитку почуття свідомої військової... | |||
38190. | Проблеми національних інтересів та національної безпеки | 211 KB | |
Національні інтереси України у внутрішньополітичному вимірі та у системі міжнародних відносин становлять єдине ціле. У цілому вони ставлять за мету: забезпечення свободи, незалежності та державного суверенітету України | |||
38191. | Воєнно-політична обстановка | 128 KB | |
Важливо наголосити що Ратцель у своїх концептуальних побудовах відштовхувався не від якихось умоглядних політичних ідей підганяючи під них географічні економічні історичні та культорологічні факти а навпаки фундаментальне вивчення суспільних і природничих наук дало йому змогу на їх емпіричній базі спорудити узагальнюючу концепцію політичної географії тобто геополітики. Фрідріх Ратцель народився 1844 року у невеликому німецькому місті Карлсруе там пройшли його роки навчання в гімназії.Ратцеля; хоча задля об\'єктивності необхідно додати... | |||