PHP内核两大流程之请求处理_PHP教程
PHP内核两大流程之请求处理
static int php_handler(request_rec *r) { /* Initiliaze the context */ php_struct * volatile ctx; void *conf; apr_bucket_brigade * volatile brigade; apr_bucket *bucket; apr_status_t rv; request_rec * volatile parent_req = NULL; TSRMLS_FETCH(); ...... zend_file_handle zfd; zfd.type = ZEND_HANDLE_FILENAME; zfd.filename = (char *) r->filename; zfd.free_filename = 0; zfd.opened_path = NULL; zend_execute_scripts(ZEND_INCLUDE TSRMLS_CC, NULL, 1, &zfd); ...... } ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...) /* {{{ */ { ...... EG(active_op_array) = \ zend_compile_file(file_handle, type TSRMLS_CC); ...... zend_execute(EG(active_op_array) TSRMLS_CC); ...... } ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)   {       // 初始化执行上下文       zend_execute_data execute_data;          // 如果有异常就退出执行       if (EG(exception)) {           return;       }          /* Initialize execute_data */       EX(fbc) = NULL; // 初始化正在调用的函数       EX(object) = NULL; // 初始化正在调用的对象       EX(old_error_reporting) = NULL; // 初始化错误报告变量              // 为执行栈分配空间       if (op_array->T < TEMP_VAR_STACK_LIMIT) {           EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable) * op_array->T);       } else {           EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0);       }       // 为临时变量分配空间并初始化这些空间       EX(CVs) = (zval***)do_alloca(sizeof(zval**) * op_array->last_var);       memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var);              EX(op_array) = op_array;              // 切换执行上下文       EX(original_in_execution) = EG(in_execution);       EX(symbol_table) = EG(active_symbol_table);       EX(prev_execute_data) = EG(current_execute_data); // 将当前全局变量中的执行数据压栈       EG(current_execute_data) = &execute_data; // 将当前执行上下文压栈          EG(in_execution) = 1;       // 初始化第一个指令(opcode)       /*      #define ZEND_VM_SET_OPCODE(new_op) \      CHECK_SYMBOL_TABLES() \      EX(opline) = new_op            execute_data.opline 为当前执行的 opcode      */       if (op_array->start_op) {           ZEND_VM_SET_OPCODE(op_array->start_op);       } else {           ZEND_VM_SET_OPCODE(op_array->opcodes);       }          if (op_array->uses_this && EG(This)) {           EG(This)->refcount++; /* For $this pointer */           if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) {               EG(This)->refcount--;           }       }          // 将存储opline的内存地址赋给 executor_globals.online_ptr ,可以实时跟踪opcode的执行       EG(opline_ptr) = &EX(opline);          EX(function_state).function = (zend_function *) op_array;       EG(function_state_ptr) = &EX(function_state);   #if ZEND_DEBUG       /* function_state.function_symbol_table is saved as-is to a stack,       * which is an intentional UMR.  Shut it up if we're in DEBUG.       */       EX(function_state).function_symbol_table = NULL;   #endif              while (1) {   #ifdef ZEND_WIN32           if (EG(timed_out)) {               zend_timeout(0);           }   #endif                      // 循环调用每个opline的 handler 函数,如果是推出函数的话,返回值大于0,就退出           if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {         return;           }          }       zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen");   }  

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Um den Linux-Kernel auf Ubuntu22.04 zu installieren, können Sie die folgenden Schritte ausführen: Aktualisieren Sie das System: Stellen Sie zunächst sicher, dass Ihr Ubuntu-System auf dem neuesten Stand ist. Führen Sie den folgenden Befehl aus, um das Systempaket zu aktualisieren: sudoaptupdatesudoaptupgrade Laden Sie die Kerneldatei herunter: Besuchen Sie die Offizielle Linux-Kernel-Website () zum Herunterladen der erforderlichen Kernel-Version. Wählen Sie eine stabile Version und laden Sie die Quellcodedatei herunter (mit der Erweiterung .tar.gz oder .tar.xz), zum Beispiel: wget Entpacken Sie die Datei: Verwenden Sie den folgenden Befehl, um die heruntergeladene Kernel-Quellcodedatei zu entpacken: tar-xflinux-5.14 .tar. xz install build dependencies: Installieren Sie die zum Erstellen des Kernels erforderlichen Tools und Abhängigkeiten. Ausführen

Ändern Sie die Kernel-Startsequenz von Linux 1. Ändern Sie die Kernel-Startsequenz von RHEL6/CentOS6. Überprüfen Sie die Datei /etc/grub.conf, um die Systemkernel-Situation zu ermitteln. Dem Dokument zufolge gibt es im System zwei Kernel-Versionen, nämlich 2.6.32-573.18.1.el6.x86_64 und 2.6.32-431.23.3.el6.x86_64. Die Kernel-Versionen werden von oben nach unten aufgelistet. In der Datei grub.conf können Sie durch Anpassen der Standardparameter entscheiden, welche Kernel-Version beim Systemstart verwendet werden soll. Der Standardwert ist 0, was bedeutet, dass das System die neueste Kernel-Version startet. Ein Wert von 0 entspricht dem ersten Inhalt, der in der Datei grub.conf aufgeführt ist.

Basiert das Android-System auf dem Linux-Kernel? Das Android-System, eines der am weitesten verbreiteten mobilen Betriebssysteme der Welt, soll seit jeher auf Basis des Linux-Kernels entwickelt werden. Doch wie ist die reale Situation? Lassen Sie uns dieses Problem untersuchen. Lassen Sie uns zunächst etwas über den Linux-Kernel lernen. Der Linux-Kernel als Open-Source-Betriebssystemkernel wurde erstmals 1991 von Linus Torvalds veröffentlicht. Es bietet eine gute Grundlage für viele Betriebssysteme, einschließlich And

Analyse und Analyse der Hauptfunktionen des Linux-Kernels Der Linux-Kernel ist ein großes und komplexes System, in dem die Hauptfunktion eine wichtige Rolle spielt. Sie ist der Einstiegspunkt des gesamten Systems und schließlich für die Initialisierung verschiedener Subsysteme, Treiber und Kernelmodule verantwortlich Starten Sie das gesamte Betriebssystem. In diesem Artikel werden die Hauptfunktionen des Linux-Kernels analysiert und analysiert und seine Schlüsselfunktionen und der Ausführungsablauf anhand spezifischer Codebeispiele demonstriert. Im Linux-Kernel ist der Einstiegspunkt der Hauptfunktion start_k in der Datei init/main.c.

Titel: Erkundung der Programmiersprache, die dem Linux-Kernel zugrunde liegt. Als stabiler und zuverlässiger Open-Source-Betriebssystemkern bietet der Linux-Kernel ein breites Anwendungsspektrum im Computerbereich. Um ein tiefgreifendes Verständnis des Linux-Kernels zu erlangen, müssen Sie die auf der zugrunde liegenden Ebene verwendete Programmiersprache einbeziehen. Tatsächlich ist der Linux-Kernel hauptsächlich in der Sprache C geschrieben, einer effizienten, flexiblen und einfach zu wartenden Programmiersprache, die sich sehr gut für die Betriebssystementwicklung eignet. In diesem Artikel werden die Grundlagen des Linux-Kernels aus einer detaillierten Perspektive untersucht

Detaillierte Erläuterung des Speicherorts des Linux-Kernel-Quellcodes. Der Linux-Kernel-Quellcode ist der Kernbestandteil des Linux-Betriebssystems. Er enthält den Implementierungscode für verschiedene Funktionen des Betriebssystems. Um zu verstehen, wo der Linux-Kernel-Quellcode gespeichert ist, müssen wir zunächst die Organisationsstruktur des Linux-Kernels verstehen. Der Linux-Kernel-Quellcode wird normalerweise im Verzeichnis /usr/src/linux oder /usr/src/linux- gespeichert. In diesem Verzeichnis gibt es viele

Das populärere System ist jetzt das Win10-System. Natürlich gibt es auch Benutzer, die sich auf ein Upgrade vorbereiten. Was diese Benutzer am meisten beunruhigt, ist, ob die Leistung von Win10 im Vergleich zu Win7 verbessert wird. Tatsächlich gibt es insgesamt noch einige Verbesserungen und auch die Kompatibilität ist gut. Ist die Leistung von Win10 im Vergleich zu Win7 verbessert? Antwort: Die Leistung von Win10 ist im Vergleich zu Win7 verbessert. Die Gesamtverbesserung ist nicht sehr groß, da die Leistung hauptsächlich an die Hardware gebunden ist. Das Win10-System wurde jedoch zahlreichen Optimierungen unterzogen, damit es eine bessere Unterstützung bieten kann. Darüber hinaus unterstützt Microsoft keine Win7-Updates mehr, sodass Win10 in Zukunft das am weitesten verbreitete System sein wird. Vergleichsmerkmale von Win10 im Vergleich zu Win7: 1. Konfiguration: Win7 ist seit mehr als zehn Jahren auf dem Markt und hat viel durchgemacht.

Das Kompilieren und Installieren des Ubuntu-Kernels erfordert bestimmte Fachkenntnisse und praktische Erfahrung. Hier sind die allgemeinen Schritte, aber bitte gehen Sie vorsichtig vor, da dieser Vorgang gewisse Risiken bergen kann. Bevor Sie beginnen, sichern Sie unbedingt wichtige Daten und Systeme. Holen Sie sich den Quellcode: Besuchen Sie die offizielle Ubuntu-Website () oder die Kernel-Entwickler-Website (), um den neuesten Kernel-Quellcode herunterzuladen. Entpacken Sie den Quellcode in ein geeignetes Verzeichnis, z. B. /usr/src. Kompilierungsabhängigkeiten installieren: Installieren Sie die Abhängigkeiten, die zum Erstellen des Kernels erforderlich sind. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus: sudoapt-getinstallbuild-essentiallibncurses-devbisonflexlibssl-devlibelf-d
