API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)

Slides:



Advertisements
Podobne prezentacje
NIE TAKI KOMPUTER STRASZNY JAK GO MALUJĄ PODSTAWY OBSŁUGI KOMPUTERA.
Advertisements

Podstawy Przedsiębiorczości Wykład 4h + Ćwiczenia 4h Rafał Paśko PWSW Przemyśl.
Sprawozdawczość. Podstawowe terminy Okres sprawozdawczy  3 kolejne miesiące, licząc od daty zawarcia umowy o dofinansowanie projektu Rodzaje raportów.
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Systemy operacyjne wczoraj, dziś i jutro. System operacyjny (ang. Operating System, skrót OS) oprogramowanie zarządzające systemem komputerowym, tworzące.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
» System Uczniowie Optivum NET+ umożliwia rodzicom bezpłatny stały kontakt ze szkołą. » Pozwala im na bieżąco śledzić postępy edukacyjne dziecka i komunikować.
20/09/ Model warstwowy OSI. Model warstwowy OSI (Open Systems Interconnection ) – standard wprowadzony przez organizację ISO (International Organization.
WSPÓŁRZĘDNE GEOGRAFICZNE.  Aby określić położenie punktu na globusie stworzono siatkę geograficzną, która składa się z południków i równoleżników. Południk.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
BYĆ PRZEDSIĘBIORCZYM - nauka przez praktykę Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Porównywarki cen leków w Polsce i na świecie. Porównywarki w Polsce.
Algorytmy Informatyka Zakres rozszerzony
Po pierwsze: Bądź odważny! Weź los w swoje ręce, w końcu do odważnych świat należy. Niech Twoja odwaga nie oznacza jednak podejmowania ryzyka bez analizy.
Model warstwowy OSI Model OSI (Open Systems Interconnection) opisuje sposób przepływu informacji między aplikacjami programowymi w jednej stacji sieciowej.
Do jakiego gatunku lirycznego należy utwór (np. hymn, fraszka, bajka, elegia, sonet, pieśń, psalm, oda, tren itp.)? Czy wiersz ma tytuł? Jeśli tak, zastanów.
Sieci komputerowe. Podział sieci. Podstawowe pojęcia związane z sieciami. Internet - określenia podstawowych terminów. Komunikacja w sieci.
Komunikatory Zespół Szkół Zawodowych Nr 3 im. Adama Kocura w Katowicach - Janowie.
Budżet rodzinny Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
ACCESS - RELACJE TEMAT:. Tworzenie i edycja relacji Relacje w bazach danych tworzone są w celu powiązania z sobą danych z wielu tabel. Tworzymy (edytujemy)
Zarządzanie startupem internetowym Michał Burda, Michał Łuszczek, Agnieszka Gajownik.
Usługa ePodatki (MF) Michał Dobrzyński, Departament Informatyki MRPiPS tel
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
MODUŁ 3 TEMAT 1 POZIOM 2 Wyznaczani e celów. W TYM TEMACIE MŁODZI LUDZIE: Poznają, jak planowanie celów może pomóc im w ich przyszłej karierze Będą wyznaczyć.
1 Definiowanie i planowanie zadań budżetowych typu B.
Moduł II. Obszar formułowania Programów i Projektów.
System operacyjny Renata P. System operacyjny - jest to zbiór nadrzędnych i niezbędnych programów umożliwiających pracę na komputerze. Jest on pośrednikiem.
Język Java Paweł Rajba
Konstruowanie robotów z wykorzystaniem Vex IQ
Pliki-Partycje-Dyski
Kluczowe elementy skutecznej strategii analizy danych internetowych
Ucz i ucz się z TIK!.
Schematy blokowe.
Kurs języka C++ – wykład 2 ( )
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
Podstawowe polecenia systemu
On-the-Fly Garbage Collection
Prezentacja o Ubuntu Jakub Kociemba 2TI.
Rachunki zdań Tautologiczność funkcji
Transmisja radiowa Arduino & nRF24L01P
Trendy w Public Relations
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Rekursje Tak jak w innych językach funkcje mogą odwoływać się same do siebie Możemy regulować głębokość przed stwierdzeniem błędu (MaxRecursion, $RecursionLimit,
Akademia C# lab. 9 Zdarzenia i delegaty.
Funkcja – definicja i przykłady
Programowanie obiektowe Wykład 10
Programowanie obiektowe
Elementy analizy matematycznej
Optymalizacja programów Open-Source
Programowanie obiektowe
Kurs języka C++ – wykład 13 ( )
System operacyjny cz.2.
Bezpieczeństwo dostępu do danych w systemie Windows
Sieci komputerowe Protokół TCP/IP.
Temat: Pliki— miejsce na komputerowe informacje
Prezentacja Julia Hamala 3B.
Multicast Visualization Tool
Laboratorium 1 – obsługa wejść i wyjść
Tensor naprężeń Cauchyego
Damian Urbańczyk xHTML Tworzenie stylów CSS.
SYSTEM KONTROLI FREKWENCJI
Podstawy informatyki Zygfryd Głowacz.
Zmienne i typy danych w C#
Implementacja rekurencji w języku Haskell
POZNAJEMY PULPIT Opracowanie: mgr Barbara Benisz SP nr 20 w Rybniku
Prawa ruchu ośrodków ciągłych c. d.
Ministerstwo Rolnictwa i Rozwoju Wsi
Forum Komisji Dialogu Społecznego
Najważniejsze operacje graficzne w programie GIMP
KARNET INSTRUKTAŻ Autor: Dorota Jewczuk.
Zapis prezentacji:

API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h) Komunikacja modułu jądra z procesami użytkownika przez system plików /proc Przykład modułu korzystającego z oraz

asm/uaccess.h Służy do kopiowania danych pomiędzy przestrzenią użytkownika, a przestrzenią jądra systemu. Z tych funkcji możemy korzystać tylko będąc wewnątrz jądra. Jest to API dla modułów jądra. Dlaczego musimy specjalnie importować dane do pamięci jądra? Czyż jądro nie ma dostępu do całej pamięci od razu? Najważniejsze funkcje z : unsigned long copy_from_user (void* to, const void __user* from, unsigned long n) unsigned long copy_to_user (void __user* to, const void* from, unsigned long n) Analogicznie dla pojedyńczych zmiennych mamy zdefiniowane makra: get_user ( x, ptr ) put_user ( x, ptr )

Jak działa system plików /proc Zawartość plików w katalogu /proc generowana dynamicznie przez moduły jądra przy próbie odczytu. Nie należy się sugerować rozmiarem plików zwracanym przez stat, ls itp. Tak naprawdę zawartość pliku nie musi istnieć w żadnej z pamięci komputera. Możliwa komunikacja w obie strony kernel user

Struktura proc_dir_entry Każdy plik i katalog w systemie plików procfs ma swój egzemplarz struktury proc_dir_entry Wybrane składowe struktury proc_dir_entry: char* name – nazwa pliku/katalogu opisywanego przez daną strukturę mode_t mode – prawa dostępu do pliku(na przykład 644) read_proc_t* read_proc – wskaźnik na funkcję, która obsługuje odczyt pliku (przez użytkownika) write_proc_t* write_proc – wskaźnik na funkcję, która obsługuje zapis do pliku (dokonywany przez użytkownika)

API zawarte w pliku linux/proc_fs.h Funkcje, które trzeba znać: proc_dir_entry* create_proc_entry (name, mode, parent) proc_dir_entry* proc_mkdir (name, parent) void remove_proc_entry (name, parent) Typy argumentów powyższych funkcji: const char * name; mode_t mode; struct proc_dir_entry* parent; // można ustawić na NULL

Przykładowy moduł komunikujący się z przestrzenią użytkownika przez procfs cz. 1 #include int init(void) { struct proc_dir_entry *proc_test,*proc_test_hello; proc_test = proc_mkdir("test", NULL); proc_test_hello = create_proc_entry("test/hello",0777,NULL); proc_test_hello->read_proc=read_proc; proc_test_hello->write_proc=write_proc; return 0; } void cleanup(void) { remove_proc_entry("test/hello", NULL); remove_proc_entry("test", NULL); } module_init(init); module_exit(cleanup);

Funkcje read_proc oraz write_proc typedef int (read_proc_t)(char *buffer, char **start, off_t off, int count, int *eof, void *data); Interesują nas tylko argumenty buffer, count oraz offset. buffer - wskaźnik do bufora, do którego mamy wpisać zawartość naszego pliku użytkownikowi; Uwaga! Ten bufor nie jest w przestrzeni użytkownika, tylko w przestrzeni jądra. count – określa pojemność tego bufora off – pozycja w pliku od której użytkownik chce odczytywać dane wartość zwracana – oznacza ile bajtów umieściliśmy w buforze; Jeśli zwrócimy 0, to użytkownik dostanie informację o osiągnięciu końca pliku. typedef int (write_proc_t)(struct file *file, const char __user *buffer, unsigned long count, void *data); Interesują nas tylko argumenty buffer oraz count. buffer - wskazuje na bufor w przestrzeni użytkownika, z którego mamy pobrać dane count – rozmiar tego bufora wartość zwracana – ile bajtów udało nam się zapisać do pliku; Jeśli będziemy zwracać cały czas 0 to program użytkownika wejdzie w nieskończoną pętlę.

Przykładowy moduł komunikujący się z przestrzenią użytkownika przez procfs cz. 2 char BUFOR[]="Witaj świecie!\n"; int read_proc(char *buffer, char **start, off_t off, int count, int *eof, void *data) { int to_copy = count>sizeof(BUFOR) ? sizeof(BUFOR) : count; if(off>0) return 0; memcpy(buffer,BUFOR,to_copy); return to_copy; } int write_proc(struct file *file, const char __user *buffer, unsigned long count, void *data) { int to_copy= count>sizeof(BUFOR) ? sizeof(BUFOR) : count; copy_from_user(BUFOR,buffer,to_copy); return to_copy; }

Bibliografia User Space Memory Access The Linux Kernel Module Programming Guide Chapter 5