13. Как компютрите (не) работят

13. Как компютрите (не) работят

13. Как компютрите (не) работят

20 април 2016

Въпрос 1

Какво са built-in функциите в Питон?

Въпрос 2

Какво може да бъде модул в Питон?

Въпрос 3

Какво са .pyd файловете в Windows? Каква е разликата с DLL?

Въпрос 4

Какво са *.dll/*.so файловете?

Въпрос 5

Какво са .h файловете?

Въпрос 6

Какви проблеми решава Python/C API-то?

Но аз не знам/разбирам/харесвам C?

Алтернативи на C API

Cyton

Cyton (2)

SWIG

SWIG (2)

  • SWIG поддържа още много езици и среди
  • Python, Ruby, Perl, PHP, Lua, Guile
  • Java, .NET, D, Go
  • ... още много
  • SWIG (3)

    • Не е част от стандартния Питон
      Няма да го разглеждаме в детайли
  • SWIG / Cython

    Ctypes

    Ctypes позволява да викаме C функции директно от Python без да ни се налага да пишем и капка C код.

    Ctypes основни моменти

    Забележка: Unix vs. Windows

    Зареждане на библиотеки

    >>> from ctypes import *
    >>>
    >>> libc = cdll.LoadLibrary('msvcrt.dll')
    >>> libc
    <CDLL 'msvcrt.dll', handle 7ffc69b80000 at 6ffffe18ed0>
    >>>
    

    Calling conventions

    Извикване на функции

    >>> libc.time(None)
    1243423125
    

    Good morning world

    libc.printf(b'good morning world'
                b', the time is %d\n', libc.time(None))
    
    good morning world, the time is 1243423807
    

    Операционни системи

    Парчета код, които управляват хардуера

    Позволяват изпълнението на потребителски програми

    Има ги разни (Windows/Linux/OS X)

    Kernel

    Ядрото (duh) на операционната система

    Има пряк достъп до всичко в компютъра ви

    Грижи се за потребителските програми

    Драйвъри

    Парчета код в ядрото, които управляват конкретен хардуер

    Могат да се слагат отделно от ОС-а

    Userland

    "GNU" частта от "GNU/Linux"

    Полезните програмки, без които една ОС е безполезна

    Текстови редактори, web browser-и, терминали, графични среди, etc

    User space / Kernel space

    Userland частта вървят в първото

    Kernel-a върви във второто

    Това е грубо казано, демек е омешано, но така е в общия случай

    Няма общо с root (Linux)/Administrator (Windows)

    Защо е това разделение?

    Сигурност: между отделните процеси, както и между тях и ядрото

    ... а какво всъщност са процеси?

    Това са потребителските програми

    Всеки е разделен от всички останали

    Всеки има свое виждане за паметта

    ... а какво всъщност е виртуална памет?

    Паметта, до която имат достъп процесите

    Те НЯМАТ достъп до истинските адреси във физическата памет

    Всеки процес има собствена като те не се застъпват

    Всеки процес има право да достъпи пълното адресно пространство

    Виртуалната памет може да не е във физическата (swap file, memory mapped files, etc)

    Как User space достъпва kernel space

    През така наречените System Calls

    Това са обикновени функции, които можем да викаме

    Намират се в стандартната С блиотека, която върви с всяка ОС

    Те вътрешно ще направят магията

    Магията се нарича interrupt-и

    ... а какво всъщност са interrupt-и?

    Начин да кажем на ядрото, че искаме нещо да се случи (sys call)

    Както и начин на процесора да каже на ядрото, че нещо е станало (timer interrupt)

    Как изглежда един процес във виртуалната памет?

    Всеки процес, очевидно, има изпълним код

    Stacks, heeps, read-only segments

    Отделно има и mapped files, etc

    Въпроси?