Скачать презентацию Занятие 5 Курс Основы программирования План занятия Скачать презентацию Занятие 5 Курс Основы программирования План занятия

5 Архитектура процесса, функции.pptx

  • Количество слайдов: 19

Занятие 5 Курс Занятие 5 Курс "Основы программирования"

План занятия 1. Архитектура процесса 2. Стек 3. Функции, вызовы 4. int f(int x) План занятия 1. Архитектура процесса 2. Стек 3. Функции, вызовы 4. int f(int x) { return 0; } / function f(x) { }

Простейшая программа Блок данных Стек Блок кода (команд) int x = 10; float arr[] Простейшая программа Блок данных Стек Блок кода (команд) int x = 10; float arr[] = { 1. f, 0. 5 f, . 3 f}; char str[] = “Суббота”; int f(float x) { return x; } int main() точка входа { float a = 10. 3 f; int b = f(a) return 0; }

Программа – процесс Перед запуском: 1. Файл считывается в ОЗУ «как есть» 2. Система Программа – процесс Перед запуском: 1. Файл считывается в ОЗУ «как есть» 2. Система выделяет служебные таблицы 3. Устанавливаются права доступа к регионам памяти 4. Процесс регистрируется в системе как таковой

Размещение в памяти • Процесс находится в памяти наравне с остальным содержимым. • Права Размещение в памяти • Процесс находится в памяти наравне с остальным содержимым. • Права доступа ограничены так, чтобы процессы не вмешивались друг в друга. • Для процесса, в основном, всё выглядит так, будто других процессов нет. Адрес Содержимое 0 x 0000 Система 0 x 00000001 Система … … 0 x 1 c 003 a 8 d Ваш процесс 0 x 1 c 003 a 8 e Ваш процесс … … 0 x 1 c 003 df 1 Ваш процесс … … 0 xffff … 4 Гбайт

Служебные таблицы • Глобальная таблица дескрипторов – Сегменты памяти, существующие в ОС • Сегмент Служебные таблицы • Глобальная таблица дескрипторов – Сегменты памяти, существующие в ОС • Сегмент состояния задачи – Информация о процессе и его состоянии • Локальная таблица дескрипторов – Сегменты памяти конкретного процесса

Состояния процесса Выполняется, режим задачи Прерывание / Вызов Прекращает существование Выход Возврат Выполняется, режим Состояния процесса Выполняется, режим задачи Прерывание / Вызов Прекращает существование Выход Возврат Выполняется, режим ядра Приостановлен Возврат в режим задачи Резервируется Запуск Возобновление Готов к запуску Зарезервирован

Динамические данные об этих данных всё известно заранее int x = 10; float arr[] Динамические данные об этих данных всё известно заранее int x = 10; float arr[] = { 1. f, 0. 5 f, . 3 f}; char str[] = “Суббота”; int f(float x) функция может быть вызвана многократно { return x; } int main() { эти данные появляются по требованию float a = 10. 3 f; int b = f(a) return 0; }

Буфер временных данных int f(float x) Позиция Содержимое 0 10. 3 1 10. 3 Буфер временных данных int f(float x) Позиция Содержимое 0 10. 3 1 10. 3 int a = x; 2 10 return a+5; 3 … Позиция 0 1 2 3 { } Очистка временных данных int main() Содержимое { 10. 3 float a = 10. 3 f; 15 int b = f(a) … return 0; … }

Стек / Stack Чтобы всё работало надо знать: Позиция Содержимое 0 10. 3 1 Стек / Stack Чтобы всё работало надо знать: Позиция Содержимое 0 10. 3 1 10. 3 2 10 3 … • Где в памяти лежит этот буфер • Насколько он сейчас заполнен • Какие значения где лежат • Сколько места освобождать при выходе

Работа со стеком int f(int x, int y) { // последнюю занятую ячейку СТЕКА Работа со стеком int f(int x, int y) { // последнюю занятую ячейку СТЕКА назовём БАЗОЙ, ‘BP’ int a = x; // создание переменной: +1 ячейка // данная переменная теперь доступна по адресу if(a > y) { int b = y; // ещё 1 ячейка занята, BP+2 return a+5; // выход } else { mov int b = x, с = y; // BP+2 и BP+3 a = b+c; add } // освободить 2 ячейки (b и с) mov return a-2; // выход } // освободить все ячейки вплоть до БАЗЫ BP+1 AX, [BP+2] AX, [BP+3] [BP+1], AX

Вызов функции Вызов имеет следующий синтаксис: • имя_функции(аргумент1, …) int f(int x, int y) Вызов функции Вызов имеет следующий синтаксис: • имя_функции(аргумент1, …) int f(int x, int y) { return x*x + y; } mov mul add ret AX, [BP-1] ; что тут? AX, AX AX, [BP-2] ; возврат к месту вызова ЧТО В [BP]? int main() { int a = f(2, 7); // вызов функции f return 0; } push 7 ; положить 7 в стек push 2 ; положить 2 в стек call f ; перейти к коду функции mov [BP+1], AX ; [BP+1] – это ‘a’

Функция Функцией называется фрагмент программы, в который передаются параметры, и который возвращает значение (или Функция Функцией называется фрагмент программы, в который передаются параметры, и который возвращает значение (или ничего). • Перед использованием функцию необходимо создать. • Чтобы использовать её – осуществляют вызов.

Функция = глагол Обычно под функцией понимается некоторое сложное действие. На вход подаётся исходный Функция = глагол Обычно под функцией понимается некоторое сложное действие. На вход подаётся исходный объект, над которым требуется произвести действие. Например: вынести_мусор( пакет_с_мусором ); или x = возвести_в_степень( 5, 3 ); // 125

Объявление функции С int func(int x) { return x+1; } int func(. . . Объявление функции С int func(int x) { return x+1; } int func(. . . – задает функцию с именем func • (имя выдумывает программист, как и имена переменных). • int означает, что функция возвращает целое значение. . (int x). . . – задает список аргументов функции. . ){. . . } – задает тело функции - последовательность операторов. return выражение; – выход из функции в точку ее вызова.

Объявление функции JS function func(x) { return x+1; } function func(. . . – Объявление функции JS function func(x) { return x+1; } function func(. . . – задает функцию с именем func • (имя выдумывает программист, как и имена переменных). • функция в JS способна вернуть значение любого рода. . (x). . . – задает список аргументов функции. . ){. . . } – задает тело функции - последовательность операторов. return выражение; – выход из функции в точку ее вызова.

Передача аргументов function func(x) { x = x*x; return x+1; } var a = Передача аргументов function func(x) { x = x*x; return x+1; } var a = 10; var b = func( a ); // b = 101, a = ? Передача «простых» аргументов идёт «по значению» , то есть копией. Передача «сложных» , составных, как массивы – «по ссылке» . • Изменяя копию, нельзя повлиять на оригинал. • Работая со ссылкой вы можете влиять на оригинал. То есть, можно передать в функцию массив, а она его отсортирует.

Функция факториала 1. Используем навыки полученные на 3 -м занятии. 2. Создаём функцию, вычисляющую Функция факториала 1. Используем навыки полученные на 3 -м занятии. 2. Создаём функцию, вычисляющую y = (x!). 3. Тестируем созданную функцию. fact(0) fact(1) fact(2) fact(3) fact(4) =1 =1 =2 =6 = 24

Домашнее задание 1. Создать функцию сортировки массива, на вход принимающую массив и опционально – Домашнее задание 1. Создать функцию сортировки массива, на вход принимающую массив и опционально – значение его длины. – Массив заполнить случайными числами и отправить на сортировку. – Вывести содержимое «до» и «после» сортировки.