<?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=BSTE%3A_Advanced_Linux</id>
	<title>BSTE: 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=BSTE%3A_Advanced_Linux"/>
	<link rel="alternate" type="text/html" href="https://eduwiki.innopolis.university/index.php?title=BSTE:_Advanced_Linux&amp;action=history"/>
	<updated>2026-05-07T16:38:51Z</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=BSTE:_Advanced_Linux&amp;diff=7906&amp;oldid=prev</id>
		<title>R.sirgalina: Created page with &quot; = Advanced Linux: Understanding and programming = * '''Course name''': Advanced Linux: Understanding and programming * '''Code discipline''': xxxxx * '''Subject area''':   ==...&quot;</title>
		<link rel="alternate" type="text/html" href="https://eduwiki.innopolis.university/index.php?title=BSTE:_Advanced_Linux&amp;diff=7906&amp;oldid=prev"/>
		<updated>2022-11-25T12:17:34Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; = Advanced Linux: Understanding and programming = * &amp;#039;&amp;#039;&amp;#039;Course name&amp;#039;&amp;#039;&amp;#039;: Advanced Linux: Understanding and programming * &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;:   ==...&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: Understanding and programming =&lt;br /&gt;
* '''Course name''': Advanced Linux: Understanding and programming&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.&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;
| 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;
| Kernel debugging || &lt;br /&gt;
# • Debugging techniques&lt;br /&gt;
# • DebugFS&lt;br /&gt;
# • Other methods overview (J-Tag etc).&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;
&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 || 90-100 || -&lt;br /&gt;
|-&lt;br /&gt;
| B. Good || 75-89 || -&lt;br /&gt;
|-&lt;br /&gt;
| C. Satisfactory || 60-74 || -&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 || 40&lt;br /&gt;
|-&lt;br /&gt;
| Interim performance assessment || 10&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&lt;br /&gt;
|-&lt;br /&gt;
| Development of individual parts of software product code || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Homework and group projects || 1 || 1 || 1 || 1 || 1 || 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Midterm evaluation || 1 || 0 || 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| Testing (written or computer based) || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Discussions || 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 || 1. ARM architecture is faster than x86, itn’s it? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Why does antivirus software works in RING0? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. What is the main purpose of having interrupts? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. How-to debug anything inside interrupt context? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Show the difference in x86 and ARM CPU registers. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Create `basic` atomic operations for ARM in x86 (and vice versa). || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. 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 || 1. Monolithic kernel vs Micro-kernel. What is faster and why? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. How Linux works on HW without IOMMU? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. Tools required for building Linux Kernel. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. Name few operations systems bases on Linux and name the difference. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Contributing to Open Source software and Kernel. What is the difference? || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Git usage: commits, email-patches. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. Git usage: rewriting history. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. Building Linux Kernel for your own PC. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 5. Running new Kernel on your machine. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 6. Kernel config file location and editing. || 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 || 1. What is the difference between BIOS and UEFI? What we prefer in nowadays? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. What is the usage for secure boot? What requirements should be met for this? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. 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 || 4. What is the purpose of having initramfs? Can we skip that stage? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Build U-boot || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Rebuilding initramfs || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. Changing boot order of your PC. Creating simple systemd service. || 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 || 1. How kernel module can be compiled and used inside or outside Linux Kernel Image? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. What is the purpose of System.map file for correct Linux Kernel functionality? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. What is the real requirement to have virtual filesystems in Linux Kernel? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. Name few real and virtual filesystems. Briefly describe usage in real life. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Develop and deploy simple Kernel Module outside kernel image. Dynamic Loading. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Develop and deploy simple Kernel Module inside kernel image. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. SysFS/ DebugFS / ProcFS/ TmpFS usage || 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 || 1. Why do we need virtual memory? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Why does Linux Kernel maps itself to every process address space? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. How does page fault handler work? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. What is segmentation fault and how it handles in Linux Kernel? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Create simple allocator (myalloc/myfree). || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Create benchmark for simple allocator. || 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 || 1. What is the difference between thread and process? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Can process exist without any threads? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. What scheduling methods does Linux Kernel has? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. What make `realtime` OS really realtime? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 5. What is the difference between cooperative and preemptive multitasking? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Implement your own threads inside app. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Implement simple scheduler for your threading app. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. Implement timer for your app without using `real` timers. || 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 || 1. Why do we need locking structures? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Where is mutex preferred on spinlock? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. Where is spinlock preferred on mutex? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. Can we just write locking-free code? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 5. What is deadlock and how it could be handled? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Implement simple locking structures. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Implement Wait-die lock. || 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 || 1. Name and briefly describe kernel-debugging techniques. || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. What debug levels for printk do you know and what is their usage? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. What other methods of Kernel debugging techniques do you know? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 4. Why can’t we use regular GDB to debug Linux Kernel? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Question || 1. Usage of DebugFS for basic debugging || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 2. Usage of printk and debug levels. || 0&lt;br /&gt;
|-&lt;br /&gt;
| Question || 3. KGDB usage for Kernel debugging. || 0&lt;br /&gt;
|} &lt;br /&gt;
=== Final assessment ===&lt;br /&gt;
'''Section 1'''&lt;br /&gt;
# 1. Describe basic CPU registers and their purpose.&lt;br /&gt;
# 2. Describe x86 ABI.&lt;br /&gt;
# 3. What is context switching and how does it work?&lt;br /&gt;
# 4. Name all CPU security rings and describe security levels.&lt;br /&gt;
# 5. Interrupts. Interrupt handler.&lt;br /&gt;
'''Section 2'''&lt;br /&gt;
# 1. Briefly describe modern OS architecture. (for ex. Linux)&lt;br /&gt;
# 2. Describe supported HW by Linux Kernel.&lt;br /&gt;
# 3. Describe contribution process to Linux Kernel.&lt;br /&gt;
'''Section 3'''&lt;br /&gt;
# 1. Name popular bootloaders and briefly describe the difference.&lt;br /&gt;
# 2. Describe all boot sequence starting from pushing START button.&lt;br /&gt;
# 3. Describe in details the role of initrd/initramfs in booting process.&lt;br /&gt;
# 4. First userspace process. Describe how it works and why do we need SystemV/system?&lt;br /&gt;
'''Section 4'''&lt;br /&gt;
# 1. Describe Linux device and driver model&lt;br /&gt;
# 2. Real- and Virtual- filesystems. Describe in details.&lt;br /&gt;
# 3. Name other Linux Kernel subsystems and their usage.&lt;br /&gt;
'''Section 5'''&lt;br /&gt;
# 1. Describe how virtual memory maps on physical memory.&lt;br /&gt;
# 2. Describe in details how TLB works. How TLB increases memory operations?&lt;br /&gt;
# 3. Describe structure of page table, its location and management from OS.&lt;br /&gt;
# 4. Describe memory allocation techniques. Describe one of them in details.&lt;br /&gt;
'''Section 6'''&lt;br /&gt;
# 1. Describe how threading works.&lt;br /&gt;
# 2. Describe pthread API usage.&lt;br /&gt;
# 3. Describe difference between monotomic and realtime clocks.&lt;br /&gt;
# 4. Describe scheduling strategies. Make a suggestion, which one is preferred for different situations.&lt;br /&gt;
# 5. Describe difference in memory management between threads and processes.&lt;br /&gt;
'''Section 7'''&lt;br /&gt;
# 1. Describe mutex internals.&lt;br /&gt;
# 2. Describe spin lock internals.&lt;br /&gt;
# 3. Describe deadlock problem and how it could be handled.&lt;br /&gt;
# 4. Compare different locking methods and make conclusion of which is faster and why.&lt;br /&gt;
# 5. Deeply describe wait-die locks.&lt;br /&gt;
'''Section 8'''&lt;br /&gt;
# 1. Explain usage of debugFS in modern kernels.&lt;br /&gt;
# 2. Describe main kernel debugging techniques.&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;/div&gt;</summary>
		<author><name>R.sirgalina</name></author>
	</entry>
</feed>