<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://eduwiki.innopolis.university/index.php?action=history&amp;feed=atom&amp;title=BSc%3A_Advanced_Linux</id>
	<title>BSc: Advanced Linux - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://eduwiki.innopolis.university/index.php?action=history&amp;feed=atom&amp;title=BSc%3A_Advanced_Linux"/>
	<link rel="alternate" type="text/html" href="https://eduwiki.innopolis.university/index.php?title=BSc:_Advanced_Linux&amp;action=history"/>
	<updated>2026-05-07T15:44:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://eduwiki.innopolis.university/index.php?title=BSc:_Advanced_Linux&amp;diff=7575&amp;oldid=prev</id>
		<title>R.sirgalina: Created page with &quot; = Advanced Linux = * '''Course name''': Advanced Linux * '''Code discipline''': xxxxx * '''Subject area''':   == Short Description == This course covers the following concept...&quot;</title>
		<link rel="alternate" type="text/html" href="https://eduwiki.innopolis.university/index.php?title=BSc:_Advanced_Linux&amp;diff=7575&amp;oldid=prev"/>
		<updated>2022-09-20T08:25:03Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; = Advanced Linux = * &amp;#039;&amp;#039;&amp;#039;Course name&amp;#039;&amp;#039;&amp;#039;: Advanced Linux * &amp;#039;&amp;#039;&amp;#039;Code discipline&amp;#039;&amp;#039;&amp;#039;: xxxxx * &amp;#039;&amp;#039;&amp;#039;Subject area&amp;#039;&amp;#039;&amp;#039;:   == Short Description == This course covers the following concept...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Advanced Linux =&lt;br /&gt;
* '''Course name''': Advanced Linux&lt;br /&gt;
* '''Code discipline''': xxxxx&lt;br /&gt;
* '''Subject area''': &lt;br /&gt;
&lt;br /&gt;
== Short Description ==&lt;br /&gt;
This course covers the following concepts: The fundamental principles for `booting`; Linux Kernel: understanding, programming, debugging, contributing; Device drivers; Power management; Graphical stack overview; Userspace: understating and interaction with Kernel, debugging userspace application and libraries.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
=== Prerequisite subjects ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prerequisite topics ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Course Topics ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Course Sections and Topics&lt;br /&gt;
|-&lt;br /&gt;
! Section !! Topics within the section&lt;br /&gt;
|-&lt;br /&gt;
| X86/Arm assembler introduction || &lt;br /&gt;
# Basic assembler: registers, operations&lt;br /&gt;
# x86 ABI reference&lt;br /&gt;
# Context switching&lt;br /&gt;
# CPU security rings&lt;br /&gt;
|-&lt;br /&gt;
| Userspace || &lt;br /&gt;
# Executable files overview&lt;br /&gt;
# ELF format&lt;br /&gt;
# SO format&lt;br /&gt;
# POSIX API&lt;br /&gt;
|-&lt;br /&gt;
| Userspace debugging (GDB) || &lt;br /&gt;
# Debugging techniques overview&lt;br /&gt;
# GDB (Gnu debugger) usage&lt;br /&gt;
# Stack trace&lt;br /&gt;
# Watchpoints/breakpoints&lt;br /&gt;
|-&lt;br /&gt;
| Linux Kernel introduction || &lt;br /&gt;
# Kernel usage&lt;br /&gt;
# Supported HW&lt;br /&gt;
# Building the kernel&lt;br /&gt;
|-&lt;br /&gt;
| Booting the Kernel || &lt;br /&gt;
# Boot Sequence&lt;br /&gt;
# Device Tree&lt;br /&gt;
# U-boot&lt;br /&gt;
# initrd/initramfs&lt;br /&gt;
|-&lt;br /&gt;
| Kernel Modules || &lt;br /&gt;
# Linux device and driver m​odel&lt;br /&gt;
# Virtual Filesystems&lt;br /&gt;
|-&lt;br /&gt;
| Memory management || &lt;br /&gt;
# Physical Memory&lt;br /&gt;
# Virtual Memory&lt;br /&gt;
# Memory Allocation&lt;br /&gt;
|-&lt;br /&gt;
| Threads, processes and scheduling || &lt;br /&gt;
# Thread&lt;br /&gt;
# Processes&lt;br /&gt;
# Timers&lt;br /&gt;
|-&lt;br /&gt;
| Concurrent access to resources || &lt;br /&gt;
# Mutexes&lt;br /&gt;
# Spin locks&lt;br /&gt;
# RW-locks&lt;br /&gt;
|} &lt;br /&gt;
== Intended Learning Outcomes (ILOs) ==&lt;br /&gt;
&lt;br /&gt;
=== What is the main purpose of this course? ===&lt;br /&gt;
The main purpose of this course is to give the students advanced knowledge of how Linux operation system boots, works and what parts it is consists of.&lt;br /&gt;
&lt;br /&gt;
=== ILOs defined at three levels ===&lt;br /&gt;
&lt;br /&gt;
==== Level 1: What concepts should a student know/remember/explain? ====&lt;br /&gt;
By the end of the course, the students should be able to ...&lt;br /&gt;
* Principles of Operating Systems.&lt;br /&gt;
* Principles of bootloaders (first- /second- stage).&lt;br /&gt;
* Linux booting principles.&lt;br /&gt;
* Linux Kernel and apps debugging principles.&lt;br /&gt;
&lt;br /&gt;
==== Level 2: What basic practical skills should a student be able to perform? ====&lt;br /&gt;
By the end of the course, the students should be able to ...&lt;br /&gt;
* Memory management in Kernel and userspace.&lt;br /&gt;
* Linux kernel subsustems.&lt;br /&gt;
* Concurrent access to resources.&lt;br /&gt;
* HW devices interaction in Linux.&lt;br /&gt;
* Interrupt and multithreading execution.&lt;br /&gt;
* Real- and virtual- filesystems interaction.&lt;br /&gt;
&lt;br /&gt;
==== Level 3: What complex comprehensive skills should a student be able to apply in real-life scenarios? ====&lt;br /&gt;
By the end of the course, the students should be able to ...&lt;br /&gt;
* Kernel drivers design skills.&lt;br /&gt;
* Linux Kernel contribution and advanced GIT knowledge.&lt;br /&gt;
* C language low-level Kernel programming.&lt;br /&gt;
* C/C++ language system programming.&lt;br /&gt;
* POSIX API usage.&lt;br /&gt;
* Kernel and userspace debugging (including KGDB/GDB).&lt;br /&gt;
* x86/ARM assembly programming. &lt;br /&gt;
== Grading ==&lt;br /&gt;
&lt;br /&gt;
=== Course grading range ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Grade !! Range !! Description of performance&lt;br /&gt;
|-&lt;br /&gt;
| A. Excellent || 100-150 || -&lt;br /&gt;
|-&lt;br /&gt;
| B. Good || 80-100 || -&lt;br /&gt;
|-&lt;br /&gt;
| C. Satisfactory || 60-79 || -&lt;br /&gt;
|-&lt;br /&gt;
| D. Poor || 0-59 || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Course activities and grading breakdown ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Percentage of the overall course grade&lt;br /&gt;
|-&lt;br /&gt;
| Labs/seminar classes || 100&lt;br /&gt;
|-&lt;br /&gt;
| Interim performance assessment || 0&lt;br /&gt;
|-&lt;br /&gt;
| Exams || 50&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Recommendations for students on how to succeed in the course ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources, literature and reference materials ==&lt;br /&gt;
&lt;br /&gt;
=== Open access resources ===&lt;br /&gt;
* Writing Kernel Module: i2c -&lt;br /&gt;
* Fundamental Linux Kernel programming by Krishenko V.A., Rayzanova N.U. -  /&lt;br /&gt;
* Linux Operating System by Kuryachiy G.V., Malinskiy K.A. -&lt;br /&gt;
* Systemd after 10 years, historical and techical review, -&lt;br /&gt;
* Evolution of Linux Kernel by Novikov E.M., -&lt;br /&gt;
* Online resources shared by instructor&lt;br /&gt;
&lt;br /&gt;
=== Closed access resources ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Software and tools used within the course ===&lt;br /&gt;
 &lt;br /&gt;
= Teaching Methodology: Methods, techniques, &amp;amp; activities =&lt;br /&gt;
&lt;br /&gt;
== Activities and Teaching Methods ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Activities within each section&lt;br /&gt;
|-&lt;br /&gt;
! Learning Activities !! Section 1 !! Section 2 !! Section 3 !! Section 4 !! Section 5 !! Section 6 !! Section 7 !! Section 8 !! Section 9&lt;br /&gt;
|-&lt;br /&gt;
| Development of individual parts of software product code || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Homework and group projects || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| Midterm evaluation || 1 || 1 || 1 || 1 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| Testing (written or computer based) || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Discussions || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|} &lt;br /&gt;
== Formative Assessment and Course Activities ==&lt;br /&gt;
&lt;br /&gt;
=== Ongoing performance assessment ===&lt;br /&gt;
&lt;br /&gt;
==== Section 1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || ARM architecture is faster than x86, itn’s it? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Why does antivirus software works in RING0? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the main purpose of having interrupts? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || How-to debug anything inside interrupt context? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Show the difference in x86 and ARM CPU registers. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create `basic` atomic operations for ARM in x86 (and vice versa). || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Implement simple context switching without threads. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || Why can’t we just use .EXE and .DLL files on Linux? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Do .SO files actually share same memory physical addresses? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || POSIX vs WinAPI? Which is better from portability point of view? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the most secure method for interprocess communication? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the fastest method for interprocess communication? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create simple app for ELF format parsing. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create app that shows dependencies between .so and executable file. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create two apps communicating with each other. At least 2 methods. Compare the speed. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create app with joinable and detachable threads. Check the difference. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create app that uses fork() and execve() with controlling child process. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 3 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is GDB? What platforms can be debugged using GDB? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Do we have any alternatives for GDB? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What should we have related to the app to debug it in GDB? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Name popular GDB front-ends. Check what front-ends for GDB you already use. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What alternatives to GHIDRA do we have for different platforms? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Debug simple app using GDB with symbols in runtime. Use breakpoints and watchpoints and step by step debugging. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Load coredump and debug it in GDB. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Fix few variables in binary file using GHIDRA without source code. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || Monolithic kernel vs Micro-kernel. What is faster and why? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || How Linux works on HW without IOMMU? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Tools required for building Linux Kernel. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Name few operations systems bases on Linux and name the difference. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Contributing to Open Source software and Kernel. What is the difference? || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Git usage: commits, email-patches. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Git usage: rewriting history. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Building Linux Kernel for your own PC. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Running new Kernel on your machine. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Kernel config file location and editing. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 5 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the difference between BIOS and UEFI? What we prefer in nowadays? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the usage for secure boot? What requirements should be met for this? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Why in x86 we do not have device tree? And why is it required for ARM platforms? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the purpose of having initramfs? Can we skip that stage? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Build U-boot || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Rebuilding initramfs || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Changing boot order of your PC. Creating simple systemd service. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 6 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || How kernel module can be compiled and used inside or outside Linux Kernel Image? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the purpose of System.map file for correct Linux Kernel functionality? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the real requirement to have virtual filesystems in Linux Kernel? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Name few real and virtual filesystems. Briefly describe usage in real life. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Develop and deploy simple Kernel Module outside kernel image. Dynamic Loading. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Develop and deploy simple Kernel Module inside kernel image. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || SysFS/ DebugFS / ProcFS/ TmpFS usage || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 7 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || Why do we need virtual memory? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Why does Linux Kernel maps itself to every process address space? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || How does page fault handler work? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is segmentation fault and how it handles in Linux Kernel? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create simple allocator (myalloc/myfree). || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Create benchmark for simple allocator. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 8 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the difference between thread and process? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Can process exist without any threads? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What scheduling methods does Linux Kernel has? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What make `realtime` OS really realtime? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is the difference between cooperative and preemptive multitasking? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Implement your own threads inside app. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Implement simple scheduler for your threading app. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Implement timer for your app without using `real` timers. || 0&lt;br /&gt;
|} &lt;br /&gt;
==== Section 9 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
! Activity Type !! Content !! Is Graded?&lt;br /&gt;
|-&lt;br /&gt;
| Question || Why do we need locking structures? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Where is mutex preferred on spinlock? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Where is spinlock preferred on mutex? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Can we just write locking-free code? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || What is deadlock and how it could be handled? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || Implement simple locking structures. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || Implement Wait-die lock. || 0&lt;br /&gt;
|} &lt;br /&gt;
=== Final assessment ===&lt;br /&gt;
'''Section 1'''&lt;br /&gt;
# Describe basic CPU registers and their purpose.&lt;br /&gt;
# Describe x86 ABI.&lt;br /&gt;
# What is context switching and how does it work?&lt;br /&gt;
# Name all CPU security rings and describe security levels.&lt;br /&gt;
# Interrupts. Interrupt handler.&lt;br /&gt;
'''Section 2'''&lt;br /&gt;
# Describe ELF executable format.&lt;br /&gt;
# Describe how Linux processes could be load from ELF file.&lt;br /&gt;
# Describe .SO library loading and their layout in memory.&lt;br /&gt;
# Describe methods of interprocess communication (at least 2).&lt;br /&gt;
# POSIX. Describe network operations.&lt;br /&gt;
# POSIX. Describe pthread library.&lt;br /&gt;
# POSIX. Describe time operations.&lt;br /&gt;
# Describe select(), poll() methods. Name the difference.&lt;br /&gt;
# POSIX. Describe filesystem operations.&lt;br /&gt;
'''Section 3'''&lt;br /&gt;
# GDB. Why do we need to have symbols? Can we debug without them?&lt;br /&gt;
# GDB. Describe debugging techniques only using coredump.&lt;br /&gt;
# GDB. Describe usage or breakpoints and watchpoints.&lt;br /&gt;
# GDB/GDB Server. Remote debugging. Describe how to do that.&lt;br /&gt;
# GDB. Describe multiarch debugging.&lt;br /&gt;
# GDB. Describe how to debug multithreaded application.&lt;br /&gt;
# GDB. Stack trace. Describe usage and how-to.&lt;br /&gt;
# GHIDRA. Describe usage flow.&lt;br /&gt;
'''Section 4'''&lt;br /&gt;
# Briefly describe modern OS architecture. (for ex. Linux)&lt;br /&gt;
# Describe supported HW by Linux Kernel.&lt;br /&gt;
# Describe contribution process to Linux Kernel.&lt;br /&gt;
'''Section 5'''&lt;br /&gt;
# Name popular bootloaders and briefly describe the difference.&lt;br /&gt;
# Describe all boot sequence starting from pushing START button.&lt;br /&gt;
# Describe in details the role of initrd/initramfs in booting process.&lt;br /&gt;
# First userspace process. Describe how it works and why do we need SystemV/system?&lt;br /&gt;
'''Section 6'''&lt;br /&gt;
# Describe Linux device and driver model&lt;br /&gt;
# Real- and Virtual- filesystems. Describe in details.&lt;br /&gt;
# Name other Linux Kernel subsystems and their usage.&lt;br /&gt;
'''Section 7'''&lt;br /&gt;
# Describe how virtual memory maps on physical memory.&lt;br /&gt;
# Describe in details how TLB works. How TLB increases memory operations?&lt;br /&gt;
# Describe structure of page table, its location and management from OS.&lt;br /&gt;
# Describe memory allocation techniques. Describe one of them in details.&lt;br /&gt;
'''Section 8'''&lt;br /&gt;
# Describe how threading works.&lt;br /&gt;
# Describe pthread API usage.&lt;br /&gt;
# Describe difference between monotomic and realtime clocks.&lt;br /&gt;
# Describe scheduling strategies. Make a suggestion, which one is preferred for different situations.&lt;br /&gt;
# Describe difference in memory management between threads and processes.&lt;br /&gt;
'''Section 9'''&lt;br /&gt;
# Describe mutex internals.&lt;br /&gt;
# Describe spin lock internals.&lt;br /&gt;
# Describe deadlock problem and how it could be handled.&lt;br /&gt;
# Compare different locking methods and make conclusion of which is faster and why.&lt;br /&gt;
# Deeply describe wait-die locks.&lt;br /&gt;
# P.1.2.10 Section 10&lt;br /&gt;
# Section title: Kernel debugging&lt;br /&gt;
# Topics covered in this section:&lt;br /&gt;
# Debugging techniques&lt;br /&gt;
# DebugFS&lt;br /&gt;
# Other methods overview (J-Tag etc).&lt;br /&gt;
# KGDB&lt;br /&gt;
# What forms of evaluation were used to test students’ performance in this section?&lt;br /&gt;
# Typical questions for ongoing performance evaluation within this section&lt;br /&gt;
# Name and briefly describe kernel-debugging techniques.&lt;br /&gt;
# What debug levels for printk do you know and what is their usage?&lt;br /&gt;
# What other methods of Kernel debugging techniques do you know?&lt;br /&gt;
# Why can’t we use regular GDB to debug Linux Kernel?&lt;br /&gt;
# Typical questions for seminar classes (labs) within this section&lt;br /&gt;
# Usage of DebugFS for basic debugging&lt;br /&gt;
# Usage of printk and debug levels.&lt;br /&gt;
# KGDB usage for Kernel debugging.&lt;br /&gt;
# Test questions for final assessment in this section&lt;br /&gt;
# Explain usage of debugFS in modern kernels.&lt;br /&gt;
# Describe main kernel debugging techniques.&lt;br /&gt;
# P.1.2.11 Section 11&lt;br /&gt;
# Section title: HW busses&lt;br /&gt;
# Topics covered in this section:&lt;br /&gt;
# GPIO&lt;br /&gt;
# UART&lt;br /&gt;
# i2c&lt;br /&gt;
# spi&lt;br /&gt;
# pin muxing&lt;br /&gt;
# DMA&lt;br /&gt;
# What forms of evaluation were used to test students’ performance in this section?&lt;br /&gt;
# Typical questions for ongoing performance evaluation within this section&lt;br /&gt;
# What HW bus type should we prefer for flash memory?&lt;br /&gt;
# What bus is the fastest?&lt;br /&gt;
# What should we do if we don’t have enough available pins for our needs?&lt;br /&gt;
# Can spi devices be connected in parallel? How can we do that?&lt;br /&gt;
# DMA – overkill technique or our current basic needs? Briefly review advantages and disadvantages of DMA.&lt;br /&gt;
# Typical questions for seminar classes (labs) within this section&lt;br /&gt;
# Implement connection to other device using UART. Exchange data.&lt;br /&gt;
# Note: additional tasks will be given depends on current HW availability.&lt;br /&gt;
# Test questions for final assessment in this section&lt;br /&gt;
# Describe i2c bus. Usage of i2c bus.&lt;br /&gt;
# Describe spi bus. Usage of spi bus.&lt;br /&gt;
# Describe GPIO subsystem. Usage of GPIO.&lt;br /&gt;
# Describe pin muxing.&lt;br /&gt;
# Describe usage of DMA and consider exchange speed with and without DMA.&lt;br /&gt;
# P.1.2.12 Section 12&lt;br /&gt;
# Section title: PCI&lt;br /&gt;
# Topics covered in this section:&lt;br /&gt;
# PCI Physical parameters&lt;br /&gt;
# PCI Electrical parameters&lt;br /&gt;
# PCI Logical model&lt;br /&gt;
# PCI Configuration&lt;br /&gt;
# What forms of evaluation were used to test students’ performance in this section?&lt;br /&gt;
# Typical questions for ongoing performance evaluation within this section&lt;br /&gt;
# Briefly describe PCI specification.&lt;br /&gt;
# What is difference between PCI and PCIe?&lt;br /&gt;
# Name devices that could be connected to PC using PCI bus.&lt;br /&gt;
# Device tree and PCI. Briefly describe how we can configure them.&lt;br /&gt;
# Typical questions for seminar classes (labs) within this section&lt;br /&gt;
# Measure PCI Ex bus speed with different connection types: x1, x2, x4 and x16.&lt;br /&gt;
# Test questions for final assessment in this section&lt;br /&gt;
# Describe parameters of PCI bus interface.&lt;br /&gt;
# Describe usage of PCI bus in modern PC/laptop.&lt;br /&gt;
# Describe configuration and enumeration of devices on PCI bus.&lt;br /&gt;
# P.1.2.13 Section 13&lt;br /&gt;
# Section title: USB&lt;br /&gt;
# Topics covered in this section:&lt;br /&gt;
# USB Physical parameters&lt;br /&gt;
# USB Electrical parameters&lt;br /&gt;
# USB Logical model&lt;br /&gt;
# USB Configuration and enumeration&lt;br /&gt;
# What forms of evaluation were used to test students’ performance in this section?&lt;br /&gt;
# Typical questions for ongoing performance evaluation within this section&lt;br /&gt;
# Briefly describe USB specification.&lt;br /&gt;
# USB/A/B – type C. Describe difference.&lt;br /&gt;
# What devices could be connected using USB bus?&lt;br /&gt;
# Why we do not reboot after USB device connection to discover it?&lt;br /&gt;
# Can we add USB devices to device tree for faster enumeration?&lt;br /&gt;
# Typical questions for seminar classes (labs) within this section&lt;br /&gt;
# Implement simple USB device driver for keyboard/flash card/mouse etc.&lt;br /&gt;
# Test questions for final assessment in this section&lt;br /&gt;
# Describe parameters of USB interface.&lt;br /&gt;
# Describe usage of USB in modern PC/laptop.&lt;br /&gt;
# Describe configuration and enumeration of devices on USB.&lt;br /&gt;
# P.1.2.14 Section 14&lt;br /&gt;
# Section title: Graphical Stack overview&lt;br /&gt;
# Topics covered in this section:&lt;br /&gt;
# Framebuffer&lt;br /&gt;
# X11&lt;br /&gt;
# Wayland&lt;br /&gt;
# UI interfaces: GTK/Qt&lt;br /&gt;
# What forms of evaluation were used to test students’ performance in this section?&lt;br /&gt;
# Typical questions for ongoing performance evaluation within this section&lt;br /&gt;
# Linux- and Windows- comparison of graphical stack.&lt;br /&gt;
# Can we access framebuffer when it is double- or triple- buffered?&lt;br /&gt;
# What part of OS owns framebuffer?&lt;br /&gt;
# How X11 knows when to redraw on screen info?&lt;br /&gt;
# Can we use X11 and Wayland together?&lt;br /&gt;
# Typical questions for seminar classes (labs) within this section&lt;br /&gt;
# Create app with direct access to framebuffer.&lt;br /&gt;
# Use X11 forwarding using SSH tunnel.&lt;br /&gt;
# Create simple GTK/Qt application.&lt;br /&gt;
# Test questions for final assessment in this section&lt;br /&gt;
# Describe the usage of framebuffer.&lt;br /&gt;
# Describe the purpose of X11 system.&lt;br /&gt;
# Describe the purpose and advantages of Wayland framework.&lt;br /&gt;
&lt;br /&gt;
=== The retake exam ===&lt;br /&gt;
'''Section 1'''&lt;br /&gt;
&lt;br /&gt;
'''Section 2'''&lt;br /&gt;
&lt;br /&gt;
'''Section 3'''&lt;br /&gt;
&lt;br /&gt;
'''Section 4'''&lt;br /&gt;
&lt;br /&gt;
'''Section 5'''&lt;br /&gt;
&lt;br /&gt;
'''Section 6'''&lt;br /&gt;
&lt;br /&gt;
'''Section 7'''&lt;br /&gt;
&lt;br /&gt;
'''Section 8'''&lt;br /&gt;
&lt;br /&gt;
'''Section 9'''&lt;/div&gt;</summary>
		<author><name>R.sirgalina</name></author>
	</entry>
</feed>