Difference between revisions of "IU:TestPage"

From IU
Jump to navigation Jump to search
Tag: Manual revert
Line 1: Line 1:
   
  +
= Advanced Linux =
= Business Development, Sales and Marketing in IT Industry =
 
* '''Course name''': Business Development, Sales and Marketing in IT Industry
+
* '''Course name''': Advanced Linux
* '''Code discipline''': S22
+
* '''Code discipline''': xxxxx
* '''Subject area''': all around marketing and sales in IT industry.
+
* '''Subject area''':
   
 
== Short Description ==
 
== Short Description ==
  +
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.
This course contains two important for successful company parts: marketing and sales.
 
These are the parts that are linked with each other - it is very difficult to sell without marketing support and it is very difficult to achieve results with marketing efforts only.
 
Marketing part, starting from defining things like developing marketing strategy for the companies, finally offers practical tools of digital marketing. We will explore new digital reality and its impact on IT business. We will learn success stories of real businesses and how companies are adapting to the new changing landscape.
 
The second part of the course covers important things for every company's success – the sales process. Understand how to attract customers in negotiations, how to “get to yes” getting great deals, how to control the sales funnel – you will get the understanding how it works and try it in practice.
 
   
 
== Prerequisites ==
 
== Prerequisites ==
   
 
=== Prerequisite subjects ===
 
=== Prerequisite subjects ===
  +
* HSS310
 
   
 
=== Prerequisite topics ===
 
=== Prerequisite topics ===
  +
* Basic IT industry knowledge
 
* Basic marketing knowledge
 
   
 
== Course Topics ==
 
== Course Topics ==
Line 26: Line 22:
 
! Section !! Topics within the section
 
! Section !! Topics within the section
 
|-
 
|-
  +
| X86/Arm assembler introduction ||
| Marketing Strategy ||
 
  +
# Basic assembler: registers, operations
# Types of markets
 
  +
# x86 ABI reference
# Product-centric marketing
 
  +
# Context switching
# Customer-centric marketing
 
  +
# CPU security rings
# Developing Marketing Strategy
 
  +
|-
  +
| Userspace ||
  +
# Executable files overview
  +
# ELF format
  +
# SO format
  +
# POSIX API
  +
|-
  +
| Userspace debugging (GDB) ||
  +
# Debugging techniques overview
  +
# GDB (Gnu debugger) usage
  +
# Stack trace
  +
# Watchpoints/breakpoints
  +
|-
  +
| Linux Kernel introduction ||
  +
# Kernel usage
  +
# Supported HW
  +
# Building the kernel
  +
|-
  +
| Booting the Kernel ||
  +
# Boot Sequence
  +
# Device Tree
  +
# U-boot
  +
# initrd/initramfs
  +
|-
  +
| Kernel Modules ||
  +
# Linux device and driver m​odel
  +
# Virtual Filesystems
 
|-
 
|-
| Marketing tools ||
+
| Memory management ||
  +
# Physical Memory
# Brand&Presentation
 
  +
# Virtual Memory
# Analytics
 
  +
# Memory Allocation
# Content
 
# SMM
 
# Context advertising
 
# E-mail marketing
 
 
|-
 
|-
  +
| Threads, processes and scheduling ||
| Sales ||
 
  +
# Thread
# CRM systems
 
  +
# Processes
# B2B
 
# B2C
+
# Timers
# Negotiations
 
 
|-
 
|-
| Final Project Presentation ||
+
| Concurrent access to resources ||
  +
# Mutexes
# Presentation of marketing&sales strategy and tactics for startup
 
  +
# Spin locks
  +
# RW-locks
 
|}
 
|}
 
== Intended Learning Outcomes (ILOs) ==
 
== Intended Learning Outcomes (ILOs) ==
   
 
=== What is the main purpose of this course? ===
 
=== What is the main purpose of this course? ===
  +
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.
This course aims to give students the skills of developing a winning marketing strategy for a startup, as well as the skills to implement marketing strategy using real digital-marketing tools and sales tactics for a startup product.
 
   
 
=== ILOs defined at three levels ===
 
=== ILOs defined at three levels ===
Line 58: Line 79:
 
==== Level 1: What concepts should a student know/remember/explain? ====
 
==== Level 1: What concepts should a student know/remember/explain? ====
 
By the end of the course, the students should be able to ...
 
By the end of the course, the students should be able to ...
  +
* Principles of Operating Systems.
* Develop naming, presentation, and product offer
 
  +
* Principles of bootloaders (first- /second- stage).
* Use digital marketing tools
 
  +
* Linux booting principles.
* Use CRM
 
  +
* Linux Kernel and apps debugging principles.
* Sell its product
 
   
 
==== Level 2: What basic practical skills should a student be able to perform? ====
 
==== Level 2: What basic practical skills should a student be able to perform? ====
 
By the end of the course, the students should be able to ...
 
By the end of the course, the students should be able to ...
  +
* Memory management in Kernel and userspace.
* Skills of market type identification
 
  +
* Linux kernel subsustems.
* Skills in developing naming, presentations, product offerings
 
  +
* Concurrent access to resources.
* Skills of context advertising
 
  +
* HW devices interaction in Linux.
* Skills of SMM doing
 
  +
* Interrupt and multithreading execution.
* Skills of content marketing
 
  +
* Real- and virtual- filesystems interaction.
* Skills of e-mail marketing
 
   
 
==== Level 3: What complex comprehensive skills should a student be able to apply in real-life scenarios? ====
 
==== Level 3: What complex comprehensive skills should a student be able to apply in real-life scenarios? ====
 
By the end of the course, the students should be able to ...
 
By the end of the course, the students should be able to ...
  +
* Kernel drivers design skills.
* Skills for valuation the market environment
 
  +
* Linux Kernel contribution and advanced GIT knowledge.
* Skills how to find the right addressable market for its product
 
  +
* C language low-level Kernel programming.
* Skills of web analytics
 
  +
* C/C++ language system programming.
* Skills of CRM using
 
  +
* POSIX API usage.
* Sales skills to various types of clients
 
  +
* Kernel and userspace debugging (including KGDB/GDB).
  +
* x86/ARM assembly programming.
 
== Grading ==
 
== Grading ==
   
Line 87: Line 110:
 
! Grade !! Range !! Description of performance
 
! Grade !! Range !! Description of performance
 
|-
 
|-
| A. Excellent || 90-100 || Pass
+
| A. Excellent || 100-150 || -
 
|-
 
|-
| B. Good || 75-89 || Pass
+
| B. Good || 80-100 || -
 
|-
 
|-
| C. Satisfactory || 60-74 || Pass
+
| C. Satisfactory || 60-79 || -
 
|-
 
|-
| D. Fail || 0-59 || Fail
+
| D. Poor || 0-59 || -
 
|}
 
|}
   
Line 102: Line 125:
 
! Activity Type !! Percentage of the overall course grade
 
! Activity Type !! Percentage of the overall course grade
 
|-
 
|-
| Seminar classes || 40
+
| Labs/seminar classes || 100
 
|-
 
|-
| Interim performance assessment on the results of lecture assignments and its presentations || 30
+
| Interim performance assessment || 0
 
|-
 
|-
| Final presentation || 30
+
| Exams || 50
 
|}
 
|}
   
 
=== Recommendations for students on how to succeed in the course ===
 
=== Recommendations for students on how to succeed in the course ===
  +
The student is recommended the following scheme of preparation for classes:<br>Marketing and sales are much more about hypothesis testing and math, than creativity. Therefore, it is so important for students to try the acquired knowledge in real practice, doing small tasks after each lecture.<br>Finally, we will try to assemble a working strategy for a startup from these tasks.<br>Moreover:<br>Participation is important. Showing up is the key to success in this course.<br>Reading the recommended literature is optional, and will give you a deeper understanding of the material.
 
   
 
== Resources, literature and reference materials ==
 
== Resources, literature and reference materials ==
   
 
=== Open access resources ===
 
=== Open access resources ===
  +
* Writing Kernel Module: i2c -
* Андрей Кравченко. Неидеальная стратегия для идеальной компании.
 
  +
* Fundamental Linux Kernel programming by Krishenko V.A., Rayzanova N.U. - /
* Peter Fader. Customer Centricity.
 
  +
* Linux Operating System by Kuryachiy G.V., Malinskiy K.A. -
  +
* Systemd after 10 years, historical and techical review, -
  +
* Evolution of Linux Kernel by Novikov E.M., -
  +
* Online resources shared by instructor
   
 
=== Closed access resources ===
 
=== Closed access resources ===
  +
* Viktor Pelevin. Empire V.
 
* W. Chan Kim, Renee Mauborgne. Blue Ocean Strategy.
 
* Eric ries. Lean startup.
 
* Simon Kingsnorth. Digital Marketing Strategy.
 
* Chet Holmes. The Ultimate Sales Machine.
 
   
 
=== Software and tools used within the course ===
 
=== Software and tools used within the course ===
  +
* Standard office tools for Tables, Text and Presentation
 
 
= Teaching Methodology: Methods, techniques, & activities =
 
= Teaching Methodology: Methods, techniques, & activities =
   
 
== Activities and Teaching Methods ==
 
== Activities and Teaching Methods ==
 
{| class="wikitable"
 
{| class="wikitable"
|+ Teaching and Learning Methods within each section
+
|+ Activities within each section
 
|-
 
|-
! Teaching Techniques !! Section 1 !! Section 2 !! Section 3 !! Section 4
+
! Learning Activities !! Section 1 !! Section 2 !! Section 3 !! Section 4 !! Section 5 !! Section 6 !! Section 7 !! Section 8 !! Section 9
 
|-
 
|-
| Problem-based learning (students learn by solving open-ended problems without a strictly-defined solution) || 1 || 1 || 1 || 1
+
| Development of individual parts of software product code || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1
 
|-
 
|-
| Project-based learning (students work on a project) || 1 || 1 || 1 || 1
+
| Homework and group projects || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 0
 
|-
 
|-
| Business game (learn by playing a game that incorporates the principles of the material covered within the course). || 1 || 1 || 1 || 1
+
| Midterm evaluation || 1 || 1 || 1 || 1 || 0 || 0 || 0 || 0 || 0
 
|-
 
|-
| Task-based learning || 1 || 1 || 1 || 1
+
| Testing (written or computer based) || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1
|}
+
|-
  +
| Discussions || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1 || 1
  +
|}
  +
== Formative Assessment and Course Activities ==
  +
  +
=== Ongoing performance assessment ===
  +
  +
==== Section 1 ====
 
{| class="wikitable"
 
{| class="wikitable"
  +
|+
|+ Activities within each section
 
 
|-
 
|-
  +
! Activity Type !! Content !! Is Graded?
! Learning Activities !! Section 1 !! Section 2 !! Section 3 !! Section 4
 
 
|-
 
|-
| Lectures || 1 || 1 || 1 || 0
+
| Question || ARM architecture is faster than x86, itn’s it? || 1
 
|-
 
|-
  +
| Question || Why does antivirus software works in RING0? || 1
| Interactive Lectures || 1 || 1 || 1 || 0
 
  +
|-
  +
| Question || What is the main purpose of having interrupts? || 1
  +
|-
  +
| Question || How-to debug anything inside interrupt context? || 1
  +
|-
  +
| Question || Show the difference in x86 and ARM CPU registers. || 0
  +
|-
  +
| Question || Create `basic` atomic operations for ARM in x86 (and vice versa). || 0
  +
|-
  +
| Question || Implement simple context switching without threads. || 0
  +
|}
  +
==== Section 2 ====
  +
{| class="wikitable"
  +
|+
  +
|-
  +
! Activity Type !! Content !! Is Graded?
 
|-
 
|-
  +
| Question || Why can’t we just use .EXE and .DLL files on Linux? || 1
| Lab exercises || 1 || 1 || 1 || 0
 
 
|-
 
|-
  +
| Question || Do .SO files actually share same memory physical addresses? || 1
| Cases studies || 1 || 1 || 1 || 0
 
 
|-
 
|-
  +
| Question || POSIX vs WinAPI? Which is better from portability point of view? || 1
| Individual Projects || 1 || 1 || 1 || 1
 
 
|-
 
|-
  +
| Question || What is the most secure method for interprocess communication? || 1
| Peer Review || 1 || 1 || 1 || 1
 
 
|-
 
|-
  +
| Question || What is the fastest method for interprocess communication? || 1
| Discussions || 1 || 1 || 1 || 1
 
 
|-
 
|-
  +
| Question || Create simple app for ELF format parsing. || 0
| Presentations by students || 1 || 1 || 1 || 1
 
 
|-
 
|-
  +
| Question || Create app that shows dependencies between .so and executable file. || 0
| Written reports || 1 || 1 || 1 || 1
 
 
|-
 
|-
  +
| Question || Create two apps communicating with each other. At least 2 methods. Compare the speed. || 0
| Simulations and role-plays || 1 || 1 || 1 || 1
 
 
|-
 
|-
  +
| Question || Create app with joinable and detachable threads. Check the difference. || 0
| Experiments || 0 || 1 || 1 || 0
 
 
|-
 
|-
  +
| Question || Create app that uses fork() and execve() with controlling child process. || 0
| Group projects || 0 || 0 || 0 || 1
 
 
|}
 
|}
  +
==== Section 3 ====
== Formative Assessment and Course Activities ==
 
 
=== Ongoing performance assessment ===
 
 
==== Section 1 ====
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|+
 
|+
Line 182: Line 224:
 
! Activity Type !! Content !! Is Graded?
 
! Activity Type !! Content !! Is Graded?
 
|-
 
|-
  +
| Question || What is GDB? What platforms can be debugged using GDB? || 1
| after lecture assignments || Define target audience and describe type of market for your product. || 1
 
 
|-
 
|-
  +
| Question || Do we have any alternatives for GDB? || 1
| after lecture assignments || Make 3 cusdev with potential/existing customers of your product. || 1
 
 
|-
 
|-
  +
| Question || What should we have related to the app to debug it in GDB? || 1
| after lecture assignments || Develop your marketing strategy and present it in-class. || 1
 
  +
|-
  +
| Question || Name popular GDB front-ends. Check what front-ends for GDB you already use. || 1
  +
|-
  +
| Question || What alternatives to GHIDRA do we have for different platforms? || 1
  +
|-
  +
| Question || Debug simple app using GDB with symbols in runtime. Use breakpoints and watchpoints and step by step debugging. || 0
  +
|-
  +
| Question || Load coredump and debug it in GDB. || 0
  +
|-
  +
| Question || Fix few variables in binary file using GHIDRA without source code. || 0
 
|}
 
|}
==== Section 2 ====
+
==== Section 4 ====
 
{| class="wikitable"
 
{| class="wikitable"
 
|+
 
|+
Line 194: Line 246:
 
! Activity Type !! Content !! Is Graded?
 
! Activity Type !! Content !! Is Graded?
 
|-
 
|-
  +
| Question || Monolithic kernel vs Micro-kernel. What is faster and why? || 1
| after lecture assignments || Write a marketing article about your product or technology in the informational style manner. || 1
 
 
|-
 
|-
  +
| Question || How Linux works on HW without IOMMU? || 1
| after lecture assignments || Create a landing page for your product and connect it to Yandex Metrica or Google Analytics. || 1
 
 
|-
 
|-
  +
| Question || Tools required for building Linux Kernel. || 1
| after lecture assignments || Create a semantic core for your product and determine the current positions on your landing page. Determine key marketing metrics, including conversion rate, on your landing page. || 1
 
  +
|-
  +
| Question || Name few operations systems bases on Linux and name the difference. || 1
  +
|-
  +
| Question || Contributing to Open Source software and Kernel. What is the difference? || 0
  +
|-
  +
| Question || Git usage: commits, email-patches. || 0
  +
|-
  +
| Question || Git usage: rewriting history. || 0
  +
|-
  +
| Question || Building Linux Kernel for your own PC. || 0
  +
|-
  +
| Question || Running new Kernel on your machine. || 0
  +
|-
  +
| Question || Kernel config file location and editing. || 0
 
|}
 
|}
==== Section 3 ====
+
==== Section 5 ====
 
{| class="wikitable"
 
{| class="wikitable"
 
|+
 
|+
Line 206: Line 272:
 
! Activity Type !! Content !! Is Graded?
 
! Activity Type !! Content !! Is Graded?
 
|-
 
|-
| after lecture assignments || Create the sales funnel of your product and present it in-class. || 1
+
| Question || What is the difference between BIOS and UEFI? What we prefer in nowadays? || 1
 
|-
 
|-
| after lecture assignments || Create the budget for your marketing and sales activities and approve it with management. || 1
+
| Question || What is the usage for secure boot? What requirements should be met for this? || 1
 
|-
 
|-
  +
| Question || Why in x86 we do not have device tree? And why is it required for ARM platforms? || 1
| in-class exercise || “Sell me the pen” exercise. || 1
 
  +
|-
  +
| Question || What is the purpose of having initramfs? Can we skip that stage? || 1
  +
|-
  +
| Question || Build U-boot || 0
  +
|-
  +
| Question || Rebuilding initramfs || 0
  +
|-
  +
| Question || Changing boot order of your PC. Creating simple systemd service. || 0
  +
|}
  +
==== Section 6 ====
  +
{| class="wikitable"
  +
|+
  +
|-
  +
! Activity Type !! Content !! Is Graded?
  +
|-
  +
| Question || How kernel module can be compiled and used inside or outside Linux Kernel Image? || 1
  +
|-
  +
| Question || What is the purpose of System.map file for correct Linux Kernel functionality? || 1
  +
|-
  +
| Question || What is the real requirement to have virtual filesystems in Linux Kernel? || 1
  +
|-
  +
| Question || Name few real and virtual filesystems. Briefly describe usage in real life. || 1
  +
|-
  +
| Question || Develop and deploy simple Kernel Module outside kernel image. Dynamic Loading. || 0
  +
|-
  +
| Question || Develop and deploy simple Kernel Module inside kernel image. || 0
  +
|-
  +
| Question || SysFS/ DebugFS / ProcFS/ TmpFS usage || 0
  +
|}
  +
==== Section 7 ====
  +
{| class="wikitable"
  +
|+
  +
|-
  +
! Activity Type !! Content !! Is Graded?
  +
|-
  +
| Question || Why do we need virtual memory? || 1
  +
|-
  +
| Question || Why does Linux Kernel maps itself to every process address space? || 1
  +
|-
  +
| Question || How does page fault handler work? || 1
  +
|-
  +
| Question || What is segmentation fault and how it handles in Linux Kernel? || 1
  +
|-
  +
| Question || Create simple allocator (myalloc/myfree). || 0
  +
|-
  +
| Question || Create benchmark for simple allocator. || 0
  +
|}
  +
==== Section 8 ====
  +
{| class="wikitable"
  +
|+
  +
|-
  +
! Activity Type !! Content !! Is Graded?
  +
|-
  +
| Question || What is the difference between thread and process? || 1
  +
|-
  +
| Question || Can process exist without any threads? || 1
  +
|-
  +
| Question || What scheduling methods does Linux Kernel has? || 1
  +
|-
  +
| Question || What make `realtime` OS really realtime? || 1
  +
|-
  +
| Question || What is the difference between cooperative and preemptive multitasking? || 1
  +
|-
  +
| Question || Implement your own threads inside app. || 0
  +
|-
  +
| Question || Implement simple scheduler for your threading app. || 0
  +
|-
  +
| Question || Implement timer for your app without using `real` timers. || 0
  +
|}
  +
==== Section 9 ====
  +
{| class="wikitable"
  +
|+
  +
|-
  +
! Activity Type !! Content !! Is Graded?
  +
|-
  +
| Question || Why do we need locking structures? || 1
  +
|-
  +
| Question || Where is mutex preferred on spinlock? || 1
  +
|-
  +
| Question || Where is spinlock preferred on mutex? || 1
  +
|-
  +
| Question || Can we just write locking-free code? || 1
  +
|-
  +
| Question || What is deadlock and how it could be handled? || 1
  +
|-
  +
| Question || Implement simple locking structures. || 0
  +
|-
  +
| Question || Implement Wait-die lock. || 0
 
|}
 
|}
==== Section 4 ====
 
 
 
=== Final assessment ===
 
=== Final assessment ===
 
'''Section 1'''
 
'''Section 1'''
  +
# Describe basic CPU registers and their purpose.
# For the final assessment, students have to prepare a full project of marketing and sales promotion of their IT product and present it on the exam. The project should contain the next parts:
 
  +
# Describe x86 ABI.
# The idea of your product/service.
 
  +
# What is context switching and how does it work?
# Define your market.
 
  +
# Name all CPU security rings and describe security levels.
# Analise what type of market.
 
  +
# Interrupts. Interrupt handler.
# Target segment, who should we talk to?
 
# What is your main message(s)?
 
# What should we do to achieve the addressable market?
 
# Brand promotion, knowledge, interest, coverage, sales etc.
 
# Media design.
 
# How should we say it? Creative strategy&content.
 
# Channel (media) strategy.
 
# How do we reach them? Evidence on a real case.
 
# Budget.
 
# Money for promotion.
 
# How to close deals. Evidence on a real case.
 
# Measurement.
 
# How we control the result. Evidence on a real case.
 
 
'''Section 2'''
 
'''Section 2'''
  +
# Describe ELF executable format.
 
  +
# Describe how Linux processes could be load from ELF file.
  +
# Describe .SO library loading and their layout in memory.
  +
# Describe methods of interprocess communication (at least 2).
  +
# POSIX. Describe network operations.
  +
# POSIX. Describe pthread library.
  +
# POSIX. Describe time operations.
  +
# Describe select(), poll() methods. Name the difference.
  +
# POSIX. Describe filesystem operations.
 
'''Section 3'''
 
'''Section 3'''
  +
# GDB. Why do we need to have symbols? Can we debug without them?
 
  +
# GDB. Describe debugging techniques only using coredump.
  +
# GDB. Describe usage or breakpoints and watchpoints.
  +
# GDB/GDB Server. Remote debugging. Describe how to do that.
  +
# GDB. Describe multiarch debugging.
  +
# GDB. Describe how to debug multithreaded application.
  +
# GDB. Stack trace. Describe usage and how-to.
  +
# GHIDRA. Describe usage flow.
 
'''Section 4'''
 
'''Section 4'''
  +
# Briefly describe modern OS architecture. (for ex. Linux)
 
  +
# Describe supported HW by Linux Kernel.
  +
# Describe contribution process to Linux Kernel.
  +
'''Section 5'''
  +
# Name popular bootloaders and briefly describe the difference.
  +
# Describe all boot sequence starting from pushing START button.
  +
# Describe in details the role of initrd/initramfs in booting process.
  +
# First userspace process. Describe how it works and why do we need SystemV/system?
  +
'''Section 6'''
  +
# Describe Linux device and driver model
  +
# Real- and Virtual- filesystems. Describe in details.
  +
# Name other Linux Kernel subsystems and their usage.
  +
'''Section 7'''
  +
# Describe how virtual memory maps on physical memory.
  +
# Describe in details how TLB works. How TLB increases memory operations?
  +
# Describe structure of page table, its location and management from OS.
  +
# Describe memory allocation techniques. Describe one of them in details.
  +
'''Section 8'''
  +
# Describe how threading works.
  +
# Describe pthread API usage.
  +
# Describe difference between monotomic and realtime clocks.
  +
# Describe scheduling strategies. Make a suggestion, which one is preferred for different situations.
  +
# Describe difference in memory management between threads and processes.
  +
'''Section 9'''
  +
# Describe mutex internals.
  +
# Describe spin lock internals.
  +
# Describe deadlock problem and how it could be handled.
  +
# Compare different locking methods and make conclusion of which is faster and why.
  +
# Deeply describe wait-die locks.
  +
# P.1.2.10 Section 10
  +
# Section title: Kernel debugging
  +
# Topics covered in this section:
  +
# Debugging techniques
  +
# DebugFS
  +
# Other methods overview (J-Tag etc).
  +
# KGDB
  +
# What forms of evaluation were used to test students’ performance in this section?
  +
# Typical questions for ongoing performance evaluation within this section
  +
# Name and briefly describe kernel-debugging techniques.
  +
# What debug levels for printk do you know and what is their usage?
  +
# What other methods of Kernel debugging techniques do you know?
  +
# Why can’t we use regular GDB to debug Linux Kernel?
  +
# Typical questions for seminar classes (labs) within this section
  +
# Usage of DebugFS for basic debugging
  +
# Usage of printk and debug levels.
  +
# KGDB usage for Kernel debugging.
  +
# Test questions for final assessment in this section
  +
# Explain usage of debugFS in modern kernels.
  +
# Describe main kernel debugging techniques.
  +
# P.1.2.11 Section 11
  +
# Section title: HW busses
  +
# Topics covered in this section:
  +
# GPIO
  +
# UART
  +
# i2c
  +
# spi
  +
# pin muxing
  +
# DMA
  +
# What forms of evaluation were used to test students’ performance in this section?
  +
# Typical questions for ongoing performance evaluation within this section
  +
# What HW bus type should we prefer for flash memory?
  +
# What bus is the fastest?
  +
# What should we do if we don’t have enough available pins for our needs?
  +
# Can spi devices be connected in parallel? How can we do that?
  +
# DMA – overkill technique or our current basic needs? Briefly review advantages and disadvantages of DMA.
  +
# Typical questions for seminar classes (labs) within this section
  +
# Implement connection to other device using UART. Exchange data.
  +
# Note: additional tasks will be given depends on current HW availability.
  +
# Test questions for final assessment in this section
  +
# Describe i2c bus. Usage of i2c bus.
  +
# Describe spi bus. Usage of spi bus.
  +
# Describe GPIO subsystem. Usage of GPIO.
  +
# Describe pin muxing.
  +
# Describe usage of DMA and consider exchange speed with and without DMA.
  +
# P.1.2.12 Section 12
  +
# Section title: PCI
  +
# Topics covered in this section:
  +
# PCI Physical parameters
  +
# PCI Electrical parameters
  +
# PCI Logical model
  +
# PCI Configuration
  +
# What forms of evaluation were used to test students’ performance in this section?
  +
# Typical questions for ongoing performance evaluation within this section
  +
# Briefly describe PCI specification.
  +
# What is difference between PCI and PCIe?
  +
# Name devices that could be connected to PC using PCI bus.
  +
# Device tree and PCI. Briefly describe how we can configure them.
  +
# Typical questions for seminar classes (labs) within this section
  +
# Measure PCI Ex bus speed with different connection types: x1, x2, x4 and x16.
  +
# Test questions for final assessment in this section
  +
# Describe parameters of PCI bus interface.
  +
# Describe usage of PCI bus in modern PC/laptop.
  +
# Describe configuration and enumeration of devices on PCI bus.
  +
# P.1.2.13 Section 13
  +
# Section title: USB
  +
# Topics covered in this section:
  +
# USB Physical parameters
  +
# USB Electrical parameters
  +
# USB Logical model
  +
# USB Configuration and enumeration
  +
# What forms of evaluation were used to test students’ performance in this section?
  +
# Typical questions for ongoing performance evaluation within this section
  +
# Briefly describe USB specification.
  +
# USB/A/B – type C. Describe difference.
  +
# What devices could be connected using USB bus?
  +
# Why we do not reboot after USB device connection to discover it?
  +
# Can we add USB devices to device tree for faster enumeration?
  +
# Typical questions for seminar classes (labs) within this section
  +
# Implement simple USB device driver for keyboard/flash card/mouse etc.
  +
# Test questions for final assessment in this section
  +
# Describe parameters of USB interface.
  +
# Describe usage of USB in modern PC/laptop.
  +
# Describe configuration and enumeration of devices on USB.
  +
# P.1.2.14 Section 14
  +
# Section title: Graphical Stack overview
  +
# Topics covered in this section:
  +
# Framebuffer
  +
# X11
  +
# Wayland
  +
# UI interfaces: GTK/Qt
  +
# What forms of evaluation were used to test students’ performance in this section?
  +
# Typical questions for ongoing performance evaluation within this section
  +
# Linux- and Windows- comparison of graphical stack.
  +
# Can we access framebuffer when it is double- or triple- buffered?
  +
# What part of OS owns framebuffer?
  +
# How X11 knows when to redraw on screen info?
  +
# Can we use X11 and Wayland together?
  +
# Typical questions for seminar classes (labs) within this section
  +
# Create app with direct access to framebuffer.
  +
# Use X11 forwarding using SSH tunnel.
  +
# Create simple GTK/Qt application.
  +
# Test questions for final assessment in this section
  +
# Describe the usage of framebuffer.
  +
# Describe the purpose of X11 system.
  +
# Describe the purpose and advantages of Wayland framework.
   
 
=== The retake exam ===
 
=== The retake exam ===
 
'''Section 1'''
 
'''Section 1'''
  +
# .3 The retake exam.
 
# For the retake, students have to implement a product and follow the guidelines of the course. There has to be a meeting before the retake itself to plan and agree on the product ideas, and to answer questions.
 
 
'''Section 2'''
 
'''Section 2'''
   
Line 249: Line 537:
   
 
'''Section 4'''
 
'''Section 4'''
  +
  +
'''Section 5'''
  +
  +
'''Section 6'''
  +
  +
'''Section 7'''
  +
  +
'''Section 8'''
  +
  +
'''Section 9'''

Revision as of 13:06, 19 September 2022

Advanced Linux

  • Course name: Advanced Linux
  • Code discipline: xxxxx
  • Subject area:

Short Description

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.

Prerequisites

Prerequisite subjects

Prerequisite topics

Course Topics

Course Sections and Topics
Section Topics within the section
X86/Arm assembler introduction
  1. Basic assembler: registers, operations
  2. x86 ABI reference
  3. Context switching
  4. CPU security rings
Userspace
  1. Executable files overview
  2. ELF format
  3. SO format
  4. POSIX API
Userspace debugging (GDB)
  1. Debugging techniques overview
  2. GDB (Gnu debugger) usage
  3. Stack trace
  4. Watchpoints/breakpoints
Linux Kernel introduction
  1. Kernel usage
  2. Supported HW
  3. Building the kernel
Booting the Kernel
  1. Boot Sequence
  2. Device Tree
  3. U-boot
  4. initrd/initramfs
Kernel Modules
  1. Linux device and driver m​odel
  2. Virtual Filesystems
Memory management
  1. Physical Memory
  2. Virtual Memory
  3. Memory Allocation
Threads, processes and scheduling
  1. Thread
  2. Processes
  3. Timers
Concurrent access to resources
  1. Mutexes
  2. Spin locks
  3. RW-locks

Intended Learning Outcomes (ILOs)

What is the main purpose of this course?

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.

ILOs defined at three levels

Level 1: What concepts should a student know/remember/explain?

By the end of the course, the students should be able to ...

  • Principles of Operating Systems.
  • Principles of bootloaders (first- /second- stage).
  • Linux booting principles.
  • Linux Kernel and apps debugging principles.

Level 2: What basic practical skills should a student be able to perform?

By the end of the course, the students should be able to ...

  • Memory management in Kernel and userspace.
  • Linux kernel subsustems.
  • Concurrent access to resources.
  • HW devices interaction in Linux.
  • Interrupt and multithreading execution.
  • Real- and virtual- filesystems interaction.

Level 3: What complex comprehensive skills should a student be able to apply in real-life scenarios?

By the end of the course, the students should be able to ...

  • Kernel drivers design skills.
  • Linux Kernel contribution and advanced GIT knowledge.
  • C language low-level Kernel programming.
  • C/C++ language system programming.
  • POSIX API usage.
  • Kernel and userspace debugging (including KGDB/GDB).
  • x86/ARM assembly programming.

Grading

Course grading range

Grade Range Description of performance
A. Excellent 100-150 -
B. Good 80-100 -
C. Satisfactory 60-79 -
D. Poor 0-59 -

Course activities and grading breakdown

Activity Type Percentage of the overall course grade
Labs/seminar classes 100
Interim performance assessment 0
Exams 50

Recommendations for students on how to succeed in the course

Resources, literature and reference materials

Open access resources

  • Writing Kernel Module: i2c -
  • Fundamental Linux Kernel programming by Krishenko V.A., Rayzanova N.U. - /
  • Linux Operating System by Kuryachiy G.V., Malinskiy K.A. -
  • Systemd after 10 years, historical and techical review, -
  • Evolution of Linux Kernel by Novikov E.M., -
  • Online resources shared by instructor

Closed access resources

Software and tools used within the course

Teaching Methodology: Methods, techniques, & activities

Activities and Teaching Methods

Activities within each section
Learning Activities Section 1 Section 2 Section 3 Section 4 Section 5 Section 6 Section 7 Section 8 Section 9
Development of individual parts of software product code 1 1 1 1 1 1 1 1 1
Homework and group projects 1 1 1 1 1 1 1 1 0
Midterm evaluation 1 1 1 1 0 0 0 0 0
Testing (written or computer based) 1 1 1 1 1 1 1 1 1
Discussions 1 1 1 1 1 1 1 1 1

Formative Assessment and Course Activities

Ongoing performance assessment

Section 1

Activity Type Content Is Graded?
Question ARM architecture is faster than x86, itn’s it? 1
Question Why does antivirus software works in RING0? 1
Question What is the main purpose of having interrupts? 1
Question How-to debug anything inside interrupt context? 1
Question Show the difference in x86 and ARM CPU registers. 0
Question Create `basic` atomic operations for ARM in x86 (and vice versa). 0
Question Implement simple context switching without threads. 0

Section 2

Activity Type Content Is Graded?
Question Why can’t we just use .EXE and .DLL files on Linux? 1
Question Do .SO files actually share same memory physical addresses? 1
Question POSIX vs WinAPI? Which is better from portability point of view? 1
Question What is the most secure method for interprocess communication? 1
Question What is the fastest method for interprocess communication? 1
Question Create simple app for ELF format parsing. 0
Question Create app that shows dependencies between .so and executable file. 0
Question Create two apps communicating with each other. At least 2 methods. Compare the speed. 0
Question Create app with joinable and detachable threads. Check the difference. 0
Question Create app that uses fork() and execve() with controlling child process. 0

Section 3

Activity Type Content Is Graded?
Question What is GDB? What platforms can be debugged using GDB? 1
Question Do we have any alternatives for GDB? 1
Question What should we have related to the app to debug it in GDB? 1
Question Name popular GDB front-ends. Check what front-ends for GDB you already use. 1
Question What alternatives to GHIDRA do we have for different platforms? 1
Question Debug simple app using GDB with symbols in runtime. Use breakpoints and watchpoints and step by step debugging. 0
Question Load coredump and debug it in GDB. 0
Question Fix few variables in binary file using GHIDRA without source code. 0

Section 4

Activity Type Content Is Graded?
Question Monolithic kernel vs Micro-kernel. What is faster and why? 1
Question How Linux works on HW without IOMMU? 1
Question Tools required for building Linux Kernel. 1
Question Name few operations systems bases on Linux and name the difference. 1
Question Contributing to Open Source software and Kernel. What is the difference? 0
Question Git usage: commits, email-patches. 0
Question Git usage: rewriting history. 0
Question Building Linux Kernel for your own PC. 0
Question Running new Kernel on your machine. 0
Question Kernel config file location and editing. 0

Section 5

Activity Type Content Is Graded?
Question What is the difference between BIOS and UEFI? What we prefer in nowadays? 1
Question What is the usage for secure boot? What requirements should be met for this? 1
Question Why in x86 we do not have device tree? And why is it required for ARM platforms? 1
Question What is the purpose of having initramfs? Can we skip that stage? 1
Question Build U-boot 0
Question Rebuilding initramfs 0
Question Changing boot order of your PC. Creating simple systemd service. 0

Section 6

Activity Type Content Is Graded?
Question How kernel module can be compiled and used inside or outside Linux Kernel Image? 1
Question What is the purpose of System.map file for correct Linux Kernel functionality? 1
Question What is the real requirement to have virtual filesystems in Linux Kernel? 1
Question Name few real and virtual filesystems. Briefly describe usage in real life. 1
Question Develop and deploy simple Kernel Module outside kernel image. Dynamic Loading. 0
Question Develop and deploy simple Kernel Module inside kernel image. 0
Question SysFS/ DebugFS / ProcFS/ TmpFS usage 0

Section 7

Activity Type Content Is Graded?
Question Why do we need virtual memory? 1
Question Why does Linux Kernel maps itself to every process address space? 1
Question How does page fault handler work? 1
Question What is segmentation fault and how it handles in Linux Kernel? 1
Question Create simple allocator (myalloc/myfree). 0
Question Create benchmark for simple allocator. 0

Section 8

Activity Type Content Is Graded?
Question What is the difference between thread and process? 1
Question Can process exist without any threads? 1
Question What scheduling methods does Linux Kernel has? 1
Question What make `realtime` OS really realtime? 1
Question What is the difference between cooperative and preemptive multitasking? 1
Question Implement your own threads inside app. 0
Question Implement simple scheduler for your threading app. 0
Question Implement timer for your app without using `real` timers. 0

Section 9

Activity Type Content Is Graded?
Question Why do we need locking structures? 1
Question Where is mutex preferred on spinlock? 1
Question Where is spinlock preferred on mutex? 1
Question Can we just write locking-free code? 1
Question What is deadlock and how it could be handled? 1
Question Implement simple locking structures. 0
Question Implement Wait-die lock. 0

Final assessment

Section 1

  1. Describe basic CPU registers and their purpose.
  2. Describe x86 ABI.
  3. What is context switching and how does it work?
  4. Name all CPU security rings and describe security levels.
  5. Interrupts. Interrupt handler.

Section 2

  1. Describe ELF executable format.
  2. Describe how Linux processes could be load from ELF file.
  3. Describe .SO library loading and their layout in memory.
  4. Describe methods of interprocess communication (at least 2).
  5. POSIX. Describe network operations.
  6. POSIX. Describe pthread library.
  7. POSIX. Describe time operations.
  8. Describe select(), poll() methods. Name the difference.
  9. POSIX. Describe filesystem operations.

Section 3

  1. GDB. Why do we need to have symbols? Can we debug without them?
  2. GDB. Describe debugging techniques only using coredump.
  3. GDB. Describe usage or breakpoints and watchpoints.
  4. GDB/GDB Server. Remote debugging. Describe how to do that.
  5. GDB. Describe multiarch debugging.
  6. GDB. Describe how to debug multithreaded application.
  7. GDB. Stack trace. Describe usage and how-to.
  8. GHIDRA. Describe usage flow.

Section 4

  1. Briefly describe modern OS architecture. (for ex. Linux)
  2. Describe supported HW by Linux Kernel.
  3. Describe contribution process to Linux Kernel.

Section 5

  1. Name popular bootloaders and briefly describe the difference.
  2. Describe all boot sequence starting from pushing START button.
  3. Describe in details the role of initrd/initramfs in booting process.
  4. First userspace process. Describe how it works and why do we need SystemV/system?

Section 6

  1. Describe Linux device and driver model
  2. Real- and Virtual- filesystems. Describe in details.
  3. Name other Linux Kernel subsystems and their usage.

Section 7

  1. Describe how virtual memory maps on physical memory.
  2. Describe in details how TLB works. How TLB increases memory operations?
  3. Describe structure of page table, its location and management from OS.
  4. Describe memory allocation techniques. Describe one of them in details.

Section 8

  1. Describe how threading works.
  2. Describe pthread API usage.
  3. Describe difference between monotomic and realtime clocks.
  4. Describe scheduling strategies. Make a suggestion, which one is preferred for different situations.
  5. Describe difference in memory management between threads and processes.

Section 9

  1. Describe mutex internals.
  2. Describe spin lock internals.
  3. Describe deadlock problem and how it could be handled.
  4. Compare different locking methods and make conclusion of which is faster and why.
  5. Deeply describe wait-die locks.
  6. P.1.2.10 Section 10
  7. Section title: Kernel debugging
  8. Topics covered in this section:
  9. Debugging techniques
  10. DebugFS
  11. Other methods overview (J-Tag etc).
  12. KGDB
  13. What forms of evaluation were used to test students’ performance in this section?
  14. Typical questions for ongoing performance evaluation within this section
  15. Name and briefly describe kernel-debugging techniques.
  16. What debug levels for printk do you know and what is their usage?
  17. What other methods of Kernel debugging techniques do you know?
  18. Why can’t we use regular GDB to debug Linux Kernel?
  19. Typical questions for seminar classes (labs) within this section
  20. Usage of DebugFS for basic debugging
  21. Usage of printk and debug levels.
  22. KGDB usage for Kernel debugging.
  23. Test questions for final assessment in this section
  24. Explain usage of debugFS in modern kernels.
  25. Describe main kernel debugging techniques.
  26. P.1.2.11 Section 11
  27. Section title: HW busses
  28. Topics covered in this section:
  29. GPIO
  30. UART
  31. i2c
  32. spi
  33. pin muxing
  34. DMA
  35. What forms of evaluation were used to test students’ performance in this section?
  36. Typical questions for ongoing performance evaluation within this section
  37. What HW bus type should we prefer for flash memory?
  38. What bus is the fastest?
  39. What should we do if we don’t have enough available pins for our needs?
  40. Can spi devices be connected in parallel? How can we do that?
  41. DMA – overkill technique or our current basic needs? Briefly review advantages and disadvantages of DMA.
  42. Typical questions for seminar classes (labs) within this section
  43. Implement connection to other device using UART. Exchange data.
  44. Note: additional tasks will be given depends on current HW availability.
  45. Test questions for final assessment in this section
  46. Describe i2c bus. Usage of i2c bus.
  47. Describe spi bus. Usage of spi bus.
  48. Describe GPIO subsystem. Usage of GPIO.
  49. Describe pin muxing.
  50. Describe usage of DMA and consider exchange speed with and without DMA.
  51. P.1.2.12 Section 12
  52. Section title: PCI
  53. Topics covered in this section:
  54. PCI Physical parameters
  55. PCI Electrical parameters
  56. PCI Logical model
  57. PCI Configuration
  58. What forms of evaluation were used to test students’ performance in this section?
  59. Typical questions for ongoing performance evaluation within this section
  60. Briefly describe PCI specification.
  61. What is difference between PCI and PCIe?
  62. Name devices that could be connected to PC using PCI bus.
  63. Device tree and PCI. Briefly describe how we can configure them.
  64. Typical questions for seminar classes (labs) within this section
  65. Measure PCI Ex bus speed with different connection types: x1, x2, x4 and x16.
  66. Test questions for final assessment in this section
  67. Describe parameters of PCI bus interface.
  68. Describe usage of PCI bus in modern PC/laptop.
  69. Describe configuration and enumeration of devices on PCI bus.
  70. P.1.2.13 Section 13
  71. Section title: USB
  72. Topics covered in this section:
  73. USB Physical parameters
  74. USB Electrical parameters
  75. USB Logical model
  76. USB Configuration and enumeration
  77. What forms of evaluation were used to test students’ performance in this section?
  78. Typical questions for ongoing performance evaluation within this section
  79. Briefly describe USB specification.
  80. USB/A/B – type C. Describe difference.
  81. What devices could be connected using USB bus?
  82. Why we do not reboot after USB device connection to discover it?
  83. Can we add USB devices to device tree for faster enumeration?
  84. Typical questions for seminar classes (labs) within this section
  85. Implement simple USB device driver for keyboard/flash card/mouse etc.
  86. Test questions for final assessment in this section
  87. Describe parameters of USB interface.
  88. Describe usage of USB in modern PC/laptop.
  89. Describe configuration and enumeration of devices on USB.
  90. P.1.2.14 Section 14
  91. Section title: Graphical Stack overview
  92. Topics covered in this section:
  93. Framebuffer
  94. X11
  95. Wayland
  96. UI interfaces: GTK/Qt
  97. What forms of evaluation were used to test students’ performance in this section?
  98. Typical questions for ongoing performance evaluation within this section
  99. Linux- and Windows- comparison of graphical stack.
  100. Can we access framebuffer when it is double- or triple- buffered?
  101. What part of OS owns framebuffer?
  102. How X11 knows when to redraw on screen info?
  103. Can we use X11 and Wayland together?
  104. Typical questions for seminar classes (labs) within this section
  105. Create app with direct access to framebuffer.
  106. Use X11 forwarding using SSH tunnel.
  107. Create simple GTK/Qt application.
  108. Test questions for final assessment in this section
  109. Describe the usage of framebuffer.
  110. Describe the purpose of X11 system.
  111. Describe the purpose and advantages of Wayland framework.

The retake exam

Section 1

Section 2

Section 3

Section 4

Section 5

Section 6

Section 7

Section 8

Section 9