2012-02-22 11 views
13

Jestem początkującym dla Linux Kernel.
Wiem, że istnieją dwa kontekst
1. Proces Kontekst, działa w przestrzeni użytkownika lub Kernel przestrzeni (ex: w ramach połączenia System)
2. Przerwanie kontekścieW jakim kontekście wątek jądra działa w systemie Linux?

W jakim kontekście wątek jądra (nie związane z żadnym wątkiem użytkownika, na przykład: flush task) działa?

Czy istnieje inny kontekst inny niż kontekst przetwarzania i przerwań w jądrze systemu Linux?

Odpowiedz

15

Gwinty jądra działają w przestrzeni process contexts w przestrzeni jądra. Chociaż istnieje kilka wątków jądra, które obsługują również przerwań. Nazywają się threaded interrupt handlers. Ale nadal działają w kontekście procesu!

Here to doskonałe wyjaśnienie istotnej różnicy między 2 kontekstami!

Oto jeden, który pomoże Ci lepiej zrozumieć!

What context does the scheduler code run in?

O ile mi wiadomo, proces i przerywać to jedyne 2 konteksty.

+6

Zasadniczo * Punkt * wątków jądra jest umożliwienie jądro na wykonanie kodu w kontekście procesu, ale nie bezpośrednio w imieniu danej przestrzeni użytkownika proces. – caf

+0

@Pavan: Obsługiwane przerywacze przerwań (softirqs) wykazują cechy kontekstu przerwań (możesz nie spać), więc twierdzenie, że są one kontekstem procesu, jest sprzeczne. –

+0

@ jørgensen Jeśli czytasz dokumentację GPIO tutaj-http: //www.kernel.org/doc/Documentation/gpio.txt, mówi ona: 'Dostęp do takich GPIO wymaga kontekstu, który może się uśpić, na przykład gwintowany przerywnik IRQ'' Czy to oznacza, że ​​wątkowe procedury obsługi przerwań mogą spać w prawo? Masz rację co do softirqs. Ale czy nie są one jedynym rodzajem obsługiwanych przerwań? Czy nawet naprawdę odnosi się to do softirqów, kiedy mówią one o wątku obsługi przerwań? –

0

Cóż, istnieją pewne zadania, które nie są wywoływane przez wywołanie systemowe lub podczas obsługi przerwań. Takie są traktowane jako czyste konteksty jądra, na przykład zamiana, INIT_TASk itp., Które nie mają odpowiedniego kodu działającego w przestrzeni użytkownika.

1

Istnieje kilka stanów - niektóre mogą być specjalizacjami innych osób. Zobacz także http://www.kernel.org/doc/htmldocs/kernel-hacking.html.

  • kontekst NMI (in_nmi())
  • kontekst trudno przerwania (in_irq())
  • miękkie kontekst przerwania (in_softirq())
  • (tasklet, zegara kontekstach workqueue)
  • kontekst atomowej (in_atomic()). Możliwe wejścia to między innymi spin_lock.
  • kontekst RCU, wprowadź z rcu_read_lock np
  • kontekst użytkownika
Powiązane problemy