• External Interrupts in the x86 system. Part 3. Interrupt routing setup in a chipset, with the example of coreboot

    • Tutorial

    We continue to investigate external device interrupt routing setup in the x86 system.


    In Part 1 (Interrupt controller evolution) we looked at the theory behind interrupt controllers and all the necessary terminology. In Part 2 (Linux kernel boot options) we looked at how in practice the OS chooses between different interrupt controllers. In this part we will investigate how the BIOS sets IRQ to the interrupt controllers routing in a chipset.


    None of the modern BIOS developer companies (AwardBIOS/AMIBIOS/Insyde) open their source code. But luсkily there is coreboot — a project aimed at replacing proprietary BIOS with free firmware code. In its source code we'll see what is needed to setup the interrupt routing in a chipset.



    Read more →
  • External Interrupts in the x86 system. Part 2. Linux kernel boot options

    • Tutorial

    In the last part we discussed evolution of the interrupt delivery process from the devices in the x86 system (PIC → APIC → MSI), general theory, and all the necessary terminology.


    In this practical part we will look at how to roll back to the use of obsolete methods of interrupt delivery in Linux, and in particular we will look at Linux kernel boot options:


    • pci=nomsi
    • noapic
    • nolapic

    Also we will look at the order in which the OS looks for interrupt routing tables (ACPI/MPtable/$PIR) and what the impact is from the following boot options:


    • pci=noacpi
    • acpi=noirq
    • acpi=off

    You've probably used some combination of these options when one of the devices in your system hasn't worked correctly because of an interrupt problem. We'll go through these options and find out what they do and how they change the kernel '/proc/interrupts' interface output.

    Read more →
  • How to Make Any Process Work With Transactional NTFS: My First Step to Writing a Sandbox for Windows

      TransactionMaster One of the modules in the Windows kernel provides support for combining a set of file operations into an entity known as a transaction. Just like in databases, these entities are isolated and atomic. You can make some changes to the file system that won't be visible outside until you commit them. Or, as an alternative, you can always rollback everything. In any case, you act upon the group of operations as a whole. Precisely what needed to preserve consistency while installing software or updating our systems, right? If something goes wrong — the installer or even the whole system crashes — the transaction rolls back automatically.


      From the very first time I saw an article about this incredible mechanism, I always wondered how the world would look like from the inside. And you know what? I just discovered a truly marvelous approach to force any process to operate within a predefined transaction, which this margin is too narrow to contain. Furthermore, most of the time, it does not even require administrative privileges.


      Let's then talk about Windows internals, try out a new tool, and answer one question: what does it have to do with sandboxes?

      Read more →
    • On request of Embedded Developers: Detecting Errors in Amazon FreeRTOS

        Anyone who programs microcontrollers probably knows about FreeRTOS, or at least heard of this operating system. Amazon developers decided to enhance the abilities of this operating system to work with AWS Internet of Things services. This is how Amazon FreeRTOS appeared. We, developers of the PVS-Studio static code analyzer, were asked by mail and in comments to check these projects. Well, now get what you asked for. Keep reading to find out what came out of it.


        Read more →
      • .NET: Tools for working with multi-threading and asynchrony – Part 1

          I have originally posted this article in CodingSight blog
          The second part of the article is available here

          The need to do things in an asynchronous way – that is, dividing big tasks between multiple working units – was present long before the appearance of computers. However, when they did appear, this need became even more obvious. It is now 2019, and I’m writing this article on a laptop powered by an 8-core Intel Core CPU which, in addition to this, is simultaneously working on hundreds of processes, with the number of threads being even larger. Next to me, there lies a slightly outdated smartphone which I bought a couple of years ago – and it also houses an 8-core processor. Specialized web resources contain a wide variety of articles praising this year’s flagship smartphones equipped with 16-core CPUs. For less then $20 per hour, MS Azure can give you access to a 128-core virtual machine with 2 TB RAM. But, unfortunately, you cannot get the most out of this power unless you know how to control interaction between threads.
          Read more →
        • External Interrupts in the x86 system. Part 1. Interrupt controller evolution

          • Tutorial
          This article is about the interrupt delivery process from external devices in the x86 system. It tries to answer questions such as:

          • What is PIC and what is it for?
          • What is APIC and what is it for? What is the purpose of LAPIC and I/O APIC?
          • What are the differences between APIC, xAPIC, and x2APIC?
          • What is MSI? What are the differences between MSI and MSI-X?
          • What is the role of the $PIR, MPtable, and ACPI tables?

          If you want to know the answer for one of these questions, or if you simply want to know about interrupt controller evolution, please, welcome.
          Read more →
        • Making Git for Windows work in ReactOS

            Good day to you! image


            My name is Stanislav and I like to write code. This is my first english article on Habr which I made due to several reasons:



            This article is an english version of my very first article on russian.


            Let me introduce the main figures in this story who actually fixed the bug preventing Git from running in ReactOS — the French developer Hermès Bélusca-Maïto (or just Hermes with hbelusca nickname) and of course me (with x86corez nickname).


            The story begins with the following messages from the ReactOS Development IRC channel:


            Jun 03 18:52:56 <hbelusca> Anybody want to work on some small problem? If so, can someone figure out why this problem https://jira.reactos.org/browse/CORE-12931 happens on ReactOS? :D
            Jun 03 18:53:13 <hbelusca> That would help having a good ROS self-hosting system with git support.
            Jun 03 18:53:34 <hbelusca> (the git assertion part only).
            Read more →
          • AdBlock has stolen the banner, but banners are not teeth — they will be back

            More
            Ads
          • Running image viewer from Windows XP on modern Windows

              I have a directory with old images which I collected in the noughties. I move it with all my other files from one computer to another on every upgrade. Every now and then, when I feel a bit nostalgic, I open it and look through the pictures. There are a few GIF files with animation, and every time I notice that the default image viewer from Windows 7 does not support it. I remembered, that the image viewer from Windows XP was able to play GIF animation properly. So, I spent a bit of time to overcome a few obstacles and to run the old image viewer on modern Windows, a small launcher was created for this purpose. Now I can watch these old images in authentic interface of the old image viewer from Windows XP.


              Download: shimgvw_xp32.7z (includes a binary and source code of the launcher, and the shimgvw.dll from English Windows XP SP3).

              Read more →
              • +23
              • 11.6k
              • 1