Архитектура материнских плат

1

Задание №1



Реферат



<СТАТЬЯ>



Архитектура материнских плат



В мире существует множество компьютеров различных фирм различающихся по сложности, назначению и т.д., основной частью которых является материнская плата. Материнская плата - основная плата персонального компьютера, её по - другому называют системной платой. Современная материнская плата ПК, как правило, включает в себя чипсет, осуществляющий взаимодействие центрального процессора с ОЗУ и основной оперативной памятью, с портами ввода/вывода, со слотами расширения PCI Express, PCI, а также, обычно, с USB, SATA и IDE/ATA. Большинство устройств, которые могут присоединяться к материнской плате, делают это с помощью одного или нескольких слотов расширения или сокетов, а некоторые современные материнские платы поддерживают беспроводные устройства, использующие протоколы IrDA, Bluetooth, или

802.11 (WI-Fi).





Рис.1 Материнская плата стандарта ATX (модель MSI K7T266 Pro2)


Центральный микропроцессор – основная микросхема компьютера, в которой производятся все вычисления. Процессор на материнской плате закреплён в специальном гнезде, называемым сокетом.





Рис.2 Socket 754(AMD)



Сокет - гнездовой или щелевой разъём, предназначен для облегчения установки центрального процессора. Использование разъёма вместо прямого распаивания процессора на материнской плате упрощает замену процессора для модернизации или ремонта компьютера. Разъём может быть предназначен для установки собственно процессора или CPU-карты (например в Pegasos). Каждый разъём допускает установку только определённого типа центральных процессоров или CPU-карт. В современных материнских платах, использующих процессоры х86 , разъёмы обозначаются трехзначными номерами, при этом номер соответствует числу пинов (ножек) процессора. Старые разъёмы обозначаются в порядке выпуска, обычно одной цифрой. Приведём примеры сокетов различных фирм.

Разъёмы процессоров Intel:

Socket 1— Intel 80486;

Socket 423 — процессоры Intel Pentium 4 и Celeron (основанные на ядре Willamette);

Socket 478 — процессоры Intel Pentium 4 и Celeron (основанные на ядрах Northwood, Prescott и Willamette);

Socket479  — процессоры Intel Pentium M и Celeron M (основанные на ядрах Banias и Dothan);

Socket480  — процессоры Intel Pentium M (основанные на ядре Yonah);

Socket 603/604 — процессоры Intel Xeon основанные на ядрах Northwood и Willamette Pentium 4;

Socket T/LGA 775 — процессоры Intel Pentium 4 и Celeron (основанные на ядрах Prescott и Cedar Mill);

Socket 775  - процессорыIntel Core 2 Quad/Core 2 Extreme/Core 2 Extreme/Pentium 4/Extreme;

Socket 771  - процессоры Intel Xeon серии 50хх, 51хх (основанные на ядре Dempsey и Woodcrest)и Xeon серии 53хх (основанные на ядре Clovertown );

Разъёмы процессоров фирмы AMD:

Socket A (Socket 462) — семейство процессоров AMD K7 (Athlon, Athlon XP, Sempron и Duron);

Socket563  - процессоры Athlon XP-M с низким потреблением энергии;

Socket 754  — процессоры AMD Athlon 64 нижнего уровня и процессоры; Sempron с поддержкой только одноканального режима работы с памятью;

Socket 939 — процессоры AMD Athlon 64 и AMD Athlon FX с поддержкой двухканального режима работы с памятью;

Socket940 — процессоры AMD Opteron и ранние AMD Athlon FX (от 939 отличается одной «ногой», которая используется для контроля правильности прочитанных данных из памяти (ECC);

Socket AM2  — новый сокет для процессоров AMD. Имеет 940 контактов, но не совместим с Socket 940;

Socket AM2+  — перспективная замена для Socket AM2 (в настоящее время уже выпускается); прямая и обратная совместимость с сокетом AM2 для всех планируемых материнских плат и процессоров;

Socket AM3  — перспективная замена для Socket AM2+ (выпуск запланирован на конец 2007 - начало 2008г.);

Socket (Socket 1207) — новый сокет для процессоров Opteron;

Socket S1— сокет для процессоров Mobile Sempron;

На материнской плате устанавливаются две основные микросхемы: северный и южный мост ,образующие вместе чипсет.

Северный мост (от англ. Northbridge) — один из основных элементов чипсета компьютера, отвечающий за работу с процессором, памятью и видеоадаптером. Северный мост определяет частоту системной шины, возможный тип оперативной памяти (в системах на базе процессоров Intel) (SDRAM, DDR, другие), её максимальный объем и скорость обмена информацией с процессором. Кроме того, от северного моста зависит наличие шины видеоадаптера, её тип и в северный мост нередко встраивают и графическое ядро. Во многих случаях именно северный мост определяет тип и быстродействие шины расширения системы (PCI,PCI Express, другое). Северный мост в значительной степени влияет на то, до какой степени может быть разогнан компьютер, поскольку используемая им частота является базовой для частоты работы процессора. В современных системах, когда компьютер становится быстрее, чип всё более нагревается. Поэтому на сегодняшний день нередко используются различные типы охлаждения северного моста, например радиаторы или кулеры.

Южный мост (от англ. Southbridge), также известен как контроллер-концентратор ввода-вывода от англ. I/O Controller Hub (ICH). Это микросхема, которая реализует «медленные» взаимодействия на материнской плате между чипсетом материнской платы и её компонентами. Южный мост обычно не подключён напрямую к процессору (CPU), в отличие от северного моста. Северный мост связывает южный мост с CPU. Функционально южный мост включает в себя: 

Шину PCI; шину ISA; SMBus (SM шина) или интерфейс I2C;DMA контроллер; контроллер прерываний; IDE (SATA или PATA) контроллеры; шина LPC Bridge; часы реального времени (Real Time Clock); управление питанием (Power management (APM и ACPI); энергонезависимую память BIOS (CMOS); звуковой контроллер AC97 (опционально).

Опционально южный мост также может включать в себя поддержку,RAID контроллера, контроллера USB, контроллера Fire Wire и аудио-кодек.

Реже южный мост включает в себя поддержку клавиатуры, мыши и последовательных портов, но обычно эти устройства подключаются с помощью другого устройства – Super I/O (контроллера ввода-вывода). Поддержка шины PCI включает в себя традиционную спецификацию PCI, но может также обеспечивать поддержку шины PCI-X и PCI Express. Хотя поддержка шины ISA используется достаточно редко, она осталась неотъемлемой частью современного южного моста. Шина SM используется для связи с другими устройствами на материнской плате (например, для управления вентиляторами). Контроллер DMA позволяет устройствам на шине ISA или LPI получать прямой доступ к оперативной памяти, обходясь без помощи центрального процессора. Контроллер прерываний обеспечивает механизм выделения центрального процессора каждому устройству. IDE интерфейс позволяет работать системе с жёсткими дисками.LPC шина обеспечивает передачу данных и управление SIO (это такие устройства, как клавиатура, мышь, параллельный ,последовательный порт, инфракрасный порт и флоппи-контроллер) и BIOS ROM (флеш). APM или ACPI функции позволяет перевести компьютер в «спящий режим» или выключить его. Системная память CMOS, поддерживаемая питанием от батареи, позволяет создать ограниченную по объёму область памяти для хранения системных настроек (настроек BIOS).

На материнской плате располагаются различные шины. Компьютерная шина- подсистема, которая передает данные и/или питание между компонентами компьютера или между компьютерами. Обычно шина управляется драйвером. В отличие от связи точка—точка, к шине можно подключить несколько устройств по одному набору проводников. Каждая шина определяет свой набор коннекторов для физического подключения устройств, карт и кабелей.

ISA (англ. Industry Standard Architecture, ISA bus) — 8-ми или 16-ти разрядная системная шина IBM PC -совместимых компьютеров. Служит для подключения плат расширения стандарта ISA. Конструктивно выполняется в виде 62-х или 98-контактного разъёма на материнской плате.

С появлением материнских плат формата ATX шина ISA перестала широко использоваться в компьютерах, хотя встречаются ATX-платы с AGP 4x,6 PCI и одним или двумя потами ISA.

PCI (англ. Peripheral component interconnect, дословно: взаимосвязь периферийных компонентов) — системная шина для подключения периферийных устройств к материнской плате компьютера.

Форм-фактор материнской платы — стандарт, определяющий размеры материнской платы для персонального компьютера, места ее крепления к корпусу; расположение на ней интерфейсов шин, портов ввода/вывода, сокета центрального процессора и слотов для оперативной памяти, а также тип разъема для подключения блока питания.

Форм-фактор (как и любые другие стандарты) носит рекомендательный характер, однако подавляющее большинство производителей предпочитают его соблюдать, поскольку ценой соответствия существующим стандартам является совместимость материнской платы и стандартизированного оборудования (периферии, карт расширения) других производителей. Устаревшими считаются: Baby-AT; Mini-ATX; полноразмерная плата AT; LPX. Современными считаются: ATX; microATX; Flex-АТХ; NLX; WTX.

Внедряемыми считаются: Mini-ITX и Nano-ITX;Pico-ITX; BTX, MicroBTX и PicoBTX

Существуют материнские платы несоответствующие никаким из существующих форм-факторов (см. таблицу). Обычно это обусловлено либо тем, что производимый компьютер узкоспециализирован, либо желанием производителя материнской платы самостоятельно производить и периферийные устройства к ней, либо невозможностью использования стандартных компонентов (так называемый «брэнд», например Apple Computer, Commodore, Silicon Graphics, Hewlett Packard, Compag чаще других игнорировали стандарты; кроме того в нынешнем виде распределённый рынок производства сформировался только к 1987 г., когда многие производители уже создали собственные платформы).



Форм-фактор

Физические размеры

Спецификация, год

Примечание

XT

8,5 Ч 11" (216 Ч 279 мм)

IBM,1983

архитектура IBM PC XT

AT

12 Ч 11"–13" (305 Ч 279–330 мм)

IBM, 1984

архитектура IBM PC AT (Desktop/Tower)

Baby-AT

8,5" Ч 10"–13" (216 Ч 254-330 мм)

IBM, 1990

архитектура IBM PC XT (форм-фактор считается недействительным с 1996 г.)

ATX

12" Ч 9,6" (305 Ч 244 мм)

Intel,1995

для системных блоков типов MiniTower, FullTower

ATX Riser



Intel, 1999

для cистемных блоков типа Slim

eATX

12" Ч 13" (305 Ч 330 мм)





Mini-ATX

11,2" Ч 8,2" (284 Ч 208 мм)



для системных блоков типа Tower и компактных Desktop

microATX

9,6" Ч 9,6" (244 Ч 244 мм)

Intel, 1997

имеет меньше слотов чем ATX, также возможно использование меньшего PSU

LPX

9" Ч 11"–13" (229 Ч 279–330 мм)

Western Digital, 1987

для системных блоков типа Slim

Mini-LPX

8"–9" Ч 10"–11" (203–229 мм Ч 254–279 мм)

Western Digital,1987

для системных блоков типа Slim

NLX

8"–9" Ч 10"-13,6" (203–229 мм Ч 254–345 мм)

Intel, 1997

Предусмотрен AGP, лучшее охлаждение чем у LPX

FlexATX

9,6" Ч 7,5"-9.6" (244 Ч ?-244 мм)

Intel, 1999

разработан как замена для форм-фактора MicroATX

Mini-ITX

6,7" Ч 6,7" (170 Ч 170 мм)

VIA Technologies 2003

допускаются только 100 Вт блоки питания

Nano-ITX

(120 Ч 120 мм)

VIA Technologies, 2004



BTX

12,8" Ч 10,5" (325 Ч 267 мм)

Intel, 2004

допускается до 7 слотов и 10 отверстий для монтажа платы

MicroBTX

10,4" Ч 10,5" (264 Ч 267 мм)

Intel, 2004

допускается до 4 слотов и 7 отверстий для монтажа платы

PicoBTX

8,0" Ч 10,5" (203 Ч 267 мм)

Intel, 2004

допускается 1 слот и 4 отверстия для монтажа платы

WTX

14" Ч 16,75" (355,6 Ч 425,4 мм)

1999

для высокопроизводительных рабочих станций и серверов среднего уровня

ETX и PC-104





используются для встраиваемых (embedded) систем



Все основные электронные схемы компьютера и необходимые дополнительные устройства включаются в материнскую плату, или подключаются к ней с помощью слотов расширения. Говорить о материнской плате в отдельности от всех остальных частей компьютера не возможно — это комплекс устройств, работающий как один организм.


Список литературы



	1. Борзенко, А. IBM PC: устройство, ремонт, модернизация [Текст] / А. Борзенко // Журнал Компьютер Пресс. – 1995. – январь. – С. 52-55.

	2. Аврин, С. Компьютерные артерии [Текст] / С. Аврин // Журнал Hard ‘n’ Soft. – 1994. – №6. – С. 29–33.

	3. Фролов, А.В. Аппаратное обеспечение IBM PC [Текст] / А.В. Фролов, Г.В.Фролов // Журнал ДИАЛОГ-МИФИ. – 1992. – С. 202-206.

	4. Скотт Мюллер Модернизация и ремонт ПК [Текст] / Скотт Мюллер //Журнал Вильямс. – 2007. – С. 241–443.

	
Задание №2

	

Рисунок 1– Блок-схема к заданию №2



       начало







         a, b, c, d







ввод a, b, c,d







c>a, d>b

-

+









вмещается



c>b, d>a



-





+



не вмещаетcя

вмещается







	

        конец





Полный исходный текст программы

/* задача про прямоугольники */

#include <stdio.h>

main()

{

int a, b, c, d;

//ввод сторон прямоугодьников

printf("Enter fore positive numbers: ");

scanf("%d%d%d%d", &a, &b, &c, &d);

/* условия выполнения задачи*/

if((c > a)&&(d > b))

printf("Yes\n");//прямоугольник со сторонами a, b вмещается в прямоугольник со сторонами c, d

else

if((c > b)&&(d > a ))

printf("Yes\n");//прямоугольник со сторонами a, b вмещается в прямоугольник со сторонами c, d

else

printf("No\n");//прямоугольник со сторонами a, b не вмещается в прямоугольник со сторонами c, d

getch();

return 0;

}


Задание №3



Рисунок 2– Блок-схема к заданию №3



       начало





n=0, m=0, i, j, a[26][26]







((m==0)|| (m>25))||((n==0)||(n>25))



Ввод m, n

+









-



i = 1;        i <= n;i++

i++







j=1;j <= m;i++

j++







          a[i][j]=j







Вывод          a[i][j]













1



1









j=1;j<=(m-m%2);j++







     j%2









i=1;i<=n;

i++







ch(&a[i][j+1],

&a[i][j])















i = 1;i <= n;

i++















3

2

1



3

2

1









j=1;j <= m;

j++







Вывод          a[i][j]









           конец





Полный исходный текст программы

#include <stdio.h>

void ch(int *, int*);//прототип функции ch

main() {

int n=0, m=0, i, j;

int a[26][26]; // объявление массива

//прозьба ввести границы матрицы, удовлетворяющие условию

while (((m==0)||(m>25))||((n==0)||(n>25))) {

printf("Enter n\n");

scanf("%i", &n);

printf("Enter m\n");

scanf("%i", &m);

printf("\n");

}

//заполнение и вывод исходной матрицы

for (i = 1; i <= n; i++) {

for (j = 1;j <= m; j++) {

a[i][j] = j;

printf("%3i", a[i][j]);

}

printf ("\n");

}

printf ("\n");

/*преобразование исходной матрицы с помощью функции ch */

for(j = 1; j <= (m – m %2); j++) {

if (j%2) { 

 for( i =1; i <= n; i++) {

ch(&a[i][j+1],&a[i][j]);

}

}

}

/*вывод преобразованной матрицы*/

for (i = 1; i <= n; i++) {

for (j = 1; j <= m; j++) {

printf("%3i", a[i][j]);

}

printf ("\n");

}

return 0;//выход из функции main и из всей программы

}

void ch(int * x, int * y)// определение функции

{

// замена элементов строки местами

int t;

t = *x;

*x = *y;


Задание №4



Рисунок 3– Блок-схема к заданию №4



Начало

Начало Функция main



Ввод g

1

startPtr=NULL;








Ввод g

1

g!=0







insert(&startPtr, g);

















-

-

+

-

Ввод g

(g<1) || (g>32000)

+

delete4( startPtr,  g);

!oneLeft(startPtr)

prinList(&startPtr)



Ввод “Последний элемент = ”

Конец Main

prinList(&startPtr)





+





















	

	


*sPtr == NULL

newPtr->data = value;
newPtr->nextPtr = NULL;
currentPtr = *sPtr;



newPtr!= NULL

newPtr = malloc(sizeof(LISTNODE));;





Начало insert (*sPtr, int value)Функция insert - вставляет элемент в список 



	

(currentPtr->nextPtr) == NULL

-

-

newPtr->nextPtr= *sPtr;
*sPtr=newPtr;

+

+



Ввод “Недостаточно памяти! ”

currentPtr->nextPtr = newPtr;
newPtr->nextPtr=*sPtr;

currentPtr=currentPtr
->nextPtr

currentPtr->nextPtr != *sPtr

-

+

newPtr->nextPtr = *sPtr;
((*sPtr)->nextPtr) = newPtr;





























Конец insert



	

	
Функция prinList - печатает список



Начало int prinList(*sPtr)



currentPtr = *sPtr;

currentPtr == NULL

+

Вывод “Список пуст! ”

Конец prinlist

Вывод currentPtr->data

-

+

currentPtr = currentPtr -> nextPtr;

(currentPtr->nextPtr != *sPtr)&&(currentPtr->nextPtr != NULL)









-

	

	

	

	

	

	









	

	

	

	

	

	Функция oneLeft – возвращает 1, если в списке остался один элемент, иначе возвращает ноль

	

Началоi nt oneLeft(sPtr)



Возврат значения выржения
(sPtr->nextPtr)==NULL

Конец prinlist

	

	

	
Функция delete4 - удаляет элемент из списка

	

	

-

+

+

-

-

+

+

Конец delete4

previousPtr->nextPtr=currentPtr->nextPtr;

*sPtr=currentPtr -> nextPtr;
tempPtr = currentPtr;
free(tempPtr);

previousPtr->nextPtr=NULL;

( ((*sPtr) -> nextPtr) -> nextPtr ) != *sPtr

LISTNODEPTR previousPtr, currentPtr, tempPtr;

int i,tw=0;

n!=1

Начало int delete4(*sPtr, int n)

previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;

previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;

for(i=1; i<(n-1); i++)



previousPtr = *sPtr;
currentPtr = (*sPtr)
->nextPtr;

-













(currentPtr)!=(*sPtr)

























	

	

	

	

	Полный исходный текст программы

	// подключение стандартных заголовочных файлов

	#include <stdio.h>

	#include <stdlib.h>

	// определение структуры - ячейки связного циклического списка

	struct listNode{

	int data;

	struct listNode *nextPtr;

	};

	//определение типа структуры и указателя на нее

	typedef struct listNode LISTNODE;

	typedef LISTNODE *LISTNODEPTR;

	// прототипы функций

	// функция вывода списка

	int prinList(LISTNODEPTR *);

	// функция вставки в список

	void insert(LISTNODEPTR *, int);

	// функция удаления элемента списка

	int delete4(LISTNODEPTR *, int);

	// предсказывающая функция

	int oneLeft(LISTNODEPTR);

	// функция main

		main () {

	// определение указателя на начало списка

	LISTNODEPTR startPtr= NULL;

	int g;

	printf("Please fill the list with INTEGER value.\nAdding is stoped by 0 value.\n");

	// ввод значения для заполнения списка

	scanf("%i", &g);

	while (g!=0) {

	// вызов функции вставки в список и передача ей адреса первого элемента списка и значения нового элемента

	insert(&startPtr, g);

	scanf("%i", &g);

	}

	printf("\n __________________________________________\n");

	printf("\n List IS: \n");

	// выводит на экран список и проверяет возвращаемое функцией вывода списка значение

	if (prinList(&startPtr)) { //если выведено успешно

	// ввод значения удовлетворяющего условию типа int и условию задачи

	while ((g<1)||(g>32000)) {

	printf ("\nEnter number to delete: ");

	scanf("%i", &g);

	}

	printf("\n");

	// пока не остался один элемент - удалять элементы в соответствии с введенным номером

	while((!oneLeft(startPtr))) {

	delete4(&startPtr, g);

	};

	printf("The last element is: ");

	// выводит на экрн список

	prinList(&startPtr);

	printf("\nPress ENTER to exit...");

	getch();

	}

	else { //если вывод списка неуспешен (список пуст или поврежден)

	printf("Nothing to delete\nPress ENTER to exit...");

	getch();

	}

	return 0;

	}

	// функция вставки в список. Вставляет принятое значение в конец списка

	void insert(LISTNODEPTR *sPtr, int value){

	// инициализация переменных

	LISTNODEPTR newPtr, previousPtr, currentPtr;

	// выделяем пмять для структуры listnode, и записываем адрес в newPtr

	newPtr = malloc(sizeof(LISTNODE));

	// если память выделена:

	if (newPtr != NULL ) 

	{

	// формируем новую ячейку списка

	newPtr->data = value;

	newPtr->nextPtr = NULL;

	// ставим указатель currentPtr на начало списка

	currentPtr = *sPtr;

	// если список пустой:

	if (*sPtr == NULL) {

	// формируем первый элемент списка

	newPtr->nextPtr= *sPtr;

	*sPtr=newPtr;

	}

	else

	{ // если список не пустой

	//если список состоит из одного элемента

	if ((currentPtr->nextPtr) == NULL) {

	// вставляем новый элемент списка и зацикливаем список

	newPtr->nextPtr = *sPtr;

	((*sPtr)->nextPtr) = newPtr;

	}

	else { // если список состоит из двух и более

	// устанавливаем указатель на currentPtr на последний элемент циклического списка

	// пока следующий за currentPtr элемент не начало списка

	while (currentPtr->nextPtr != *sPtr) {

	// передвигаем currentPtr по списку вперед

	currentPtr=currentPtr->nextPtr;

	}

	// вставляем новый элемент списка и замыкаем список

	currentPtr->nextPtr = newPtr;

	newPtr->nextPtr=*sPtr;

	 }

	 }

	}

	// вывод сообщения об ошибке в случае невыделения памяти

	else

	printf("Insuficient Memory!!!!!!! ENOUGH!");

	}

	// функция печати списка. Принимает указатель списка и печатает список. Если список пуст - возвращает 0

	int prinList(LISTNODEPTR *sPtr)

	{

	// определение переменной указателя

	LISTNODEPTR currentPtr;

	// установка указателя на начало списка

	currentPtr = *sPtr;

	if (currentPtr == NULL) { // если список пустой

	printf("List is empty. \n\n");

	return 0;

	}

	else { // если не пустой

	// вывод значения элемента, на который указывает указатель currentPtr

	printf(" %d ", currentPtr->data);

	// пока следующий за currentPtr не начало списка и не конец списка

	while ((currentPtr->nextPtr != *sPtr)&&(currentPtr->nextPtr != NULL)){

	// перемещаем указатель currentPtr на следующий элемент

	currentPtr = currentPtr -> nextPtr;

	// вывод значения элемента, на который указывает указатель currentPtr

	printf(" %d ", currentPtr->data);

	 }

	 return 1;

	}

	}

	// функция сообщающая о том , что список состоит из одного элемента

	int oneLeft(LISTNODEPTR sPtr){

	return (sPtr->nextPtr)==NULL;

	}

	// функция удаления элемента. Удаляет элемент и перемещает указатель, указывающий начало списка, на следующий элемент за удаленным

	int delete4(LISTNODEPTR *sPtr, int n){

	// инициализация переменных

	LISTNODEPTR previousPtr, currentPtr, tempPtr;

	int i,tw=0;

	// елси список пуст - выйти из функции

	if ((*sPtr)==NULL)

	return 0;

	// установка указателей

	previousPtr = *sPtr;

	currentPtr = (*sPtr)->nextPtr;

	// если удаляем не первый элемент

	if (n!=1) {

	// устанавливаем указатель currentPtr на удаляемый элемент

	// устанавливаем указатель previousPtr на предшествующий ему

	for(i=1; i<(n-1); i++) {

	previousPtr = currentPtr;

	currentPtr = currentPtr->nextPtr;

	 }

	}

	else { // если удаляем первый элемент

	// устанавливаем указатель currentPtr на удаляемый элемент

	// устанавливаем указатель previousPtr на предшествующий ему

	while((currentPtr)!=(*sPtr)){

	previousPtr = currentPtr;

	currentPtr = currentPtr->nextPtr;

	 }

	};

	// если в списке не 2 элемента

	if( ( ((*sPtr)->nextPtr)->nextPtr )!=*sPtr ) {

	//исключаем currentPtr

	previousPtr->nextPtr=currentPtr->nextPtr;

	}

	else {

	// разрываем список

	previousPtr->nextPtr=NULL;

	};

	// устанавливаем указатель начала списка на следующий за currentPtr элемент

	*sPtr=currentPtr->nextPtr;

	// удаляем из памяти элемент currentPtr

	tempPtr = currentPtr;

	free(tempPtr);

	}

	//конец