Microsoft Windows: What are kernel-mode and user-mode?

Author: Roger Villela

O sistema operacional Microsoft Windows é avançado, grande e complexo. Mas em cada contexto especializado, como o gerenciamento de memória, existem fundamentos a partir dos quais tudo mais é derivado. São estes fundamentos que determinam a concepção e implementação de componentes que atuam nestes contextos especializados e cooperam com os demais contextos em suas respectivas áreas especializadas. As funcionalidades disponibilizadas por uma plataforma de hardware são utilizadas através das instruções em linguagem de programação Assembly. Por exemplo, existem determinadas instruções em linguagem de programação Assembly para copiar um bloco de informações que está em uma determinada sequência de posições de memória para outra sequência de posições de memória. As instruções em linguagem de programação Assembly estão subordinadas ao nível de privilégio em que o processador está naquele momento. Nas arquiteturas IA-32 e Intel 64 existem quatro níveis de privilégio: 0, 1, 2 e 3. Os níveis de privilégio também são descritos como anéis de proteção, pois o propósito do nível de privilégio é proteger o software e o hardware do uso inadequado. O nível de privilégio 0 (zero) é o acesso irrestrito para todas as instruções e funcionalidades do hardware que essas instruções representam. O termo kernel-mode é utilizado no sistema operacional Microsoft Windows para descrever este nível de privilégio do processador e todos os componentes no sistema operacional cujas implementações precisam funcionar neste nível de privilégio do processador para ter acesso irrestrito às instruções e respectivas funcionalidades. O termo user-mode é utilizado no sistema operacional Microsoft Windows para descrever qualquer outro nível de privilégio, exceto o nível de privilégio utilizado para kernel-mode.

ENGLISH

The Microsoft Windows operating system is advanced, large, and complex. But in each specialized context, such as memory management, there are fundamentals from which everything else is derived. These fundamentals determine the design and implementation of components that act in these specialized contexts and cooperate with other contexts in their respective specialized areas. The functionality provided by a hardware platform is used through the instructions in the Assembly programming language. For example, there are certain instructions in the programming language Assembly to copy a block of information that is in a particular sequence of memory positions to another sequence of memory positions. The instructions in the Assembly programming language are subordinate to the privilege level at which the processor is at that time. In IA-32 and Intel 64 architectures There are four privilege levels: 0, 1, 2, and 3. Privilege levels are also described as protection rings, because the purpose of the privilege level is to protect the software and hardware from inappropriate use. The privilege level 0 (zero) is unrestricted access to all the hardware instructions and functionality that these statements represent. The term kernel-mode is used in the Microsoft Windows operating system to describe this level of processor privilege and all components in the operating system whose implementations need to work at this level of processor privilege to have unrestricted access to the instructions and their features. The term user-mode is used in the Microsoft Windows operating system to describe any other level of privilege, except the privilege level used for kernel-mode.

=> RVJ – Technical Education 2018.pdf

Advertisements
Posted in MySDN, Windows Architecture, Windows Programming | Leave a comment

Referência (Reference) (C++ Programming Language)

Uma referência, assim como um ponteiro, armazena um endereço de memória. Diferentemente de um ponteiro, após ser inicializada, uma referência não pode se referir a outro item e não pode receber valor nulo __nullptr (C++) / nullptr C++). O símbolo & (ampersand ou “E comercial” como é conhecido no Brasil) quando utilizado nas sintaxes descritas neste tópico, é uma referência. Existem dois tipos de referência: Lvalue reference e Rvalue reference. Quando utiliza o operador &, é uma lvalue reference. Quando utiliza o operador &&, é uma rvalue reference.

Qual o propósito de uma referência?

Em uma palavra: eficiência.
Em mais palavras: redução da complexidade sintática. Muitas pessoas sentem dificuldade e insegurança quando lidam com ponteiros.

Uma referência armazena um endereço de memória.

ENGLISH

A reference, as well as a pointer, stores a memory address. Unlike a pointer, after it is initialized, a reference cannot refer to another item and cannot receive __nullptr (C++) / nullptr (C++) value. The symbol & (ampersand or “E commercial” as it is known in Brazil) when used in the syntaxes described in this topic, is a reference. There are two reference types: Lvalue reference and Rvalue reference. When you use the & operator, it’s a lvalue reference. When you use the && operator, it is an rvalue reference.

What is the purpose of a reference?

In one word: efficiency.
In more words: reduced syntactic complexity. Many people experience difficulty (have trouble) and insecurity when dealing with pointers.

A reference stores a memory address.

=> RVJ – Technical Education 2018.pdf

 

 

Posted in C++ Programming Language, MySDN, Windows Programming | Leave a comment

Interface System::IEquatable<T> – qual o propósito? como funciona? como utilizar?

Interface System::IEquatable<T> – qual o propósito? como funciona? como utilizar?

Os operadores equality == e inequality != são utilizados para identificar se as instâncias são iguais ou não. Internamente, estes operadores utilizam alguma implementação do método Equals conforme o managed type.

No reference type System::Object existe uma implementação padrão para o método System::Object::Equals. Na assinatura do método, essa implementação padrão declara um parâmetro do tipo System::Object, sendo assim, é possível informar como argumento uma instância de um reference type ou uma instância de um value type. Todo e qualquer managed type deriva direta ou indiretamente de System::Object, e todo managed type herda implicitamente essa implementação em System::Object::Equals. Quando informa como argumento para System::Object::Equals uma instância de um reference type, a comparação é realizada por referência, ou seja, se as referências do managed type apontam para uma mesma instância, e para isto, System::Object::Equals utiliza o método estático System::Object::ReferenceEquals.

Quando utilizar operadores como == (equality) e != (inequality) ou chamar explicitamente uma implementação do método Equals? Quais critérios utilizar?

Download:

=> RVJ – Technical Education 2018.pdf

Posted in C++/CLI Programming Language, CLR - Common Language Runtime, MySDN | Leave a comment