Oh, and if it weren't enough, mathematicians have a separate name for the damned nabla symbol : "del" instead of "nabla".
TODO why is it called "Del"? Is is because it is an inverted uppercase delta?
The algorithmically minded will have noticed that paging requires associative array (like Java
Map
of Python dict()
) abstract data structure where:- the keys are linear pages addresses, thus of integer type
- the values are physical page addresses, also of integer type
The single level paging scheme uses a simple array implementation of the associative array:and in C pseudo-code it looks like this:
- the keys are the array index
- this implementation is very fast in time
- but it is too inefficient in memory
linear_address[0] = physical_address_0
linear_address[1] = physical_address_1
linear_address[2] = physical_address_2
...
linear_address[2^20-1] = physical_address_N
But there another simple associative array implementation that overcomes the memory problem: an (unbalanced) k-ary tree.
A K-ary tree, is just like a binary tree, but with K children instead of 2.
Using a K-ary tree instead of an array implementation has the following trade-offs:
- it uses way less memory
- it is slower since we have to de-reference extra pointers
In C-pseudo code, a 2-level K-ary tree with and we have the following arrays:and it still contains
K = 2^10
looks like this:level0[0] = &level1_0[0]
level1_0[0] = physical_address_0_0
level1_0[1] = physical_address_0_1
...
level1_0[2^10-1] = physical_address_0_N
level0[1] = &level1_1[0]
level1_1[0] = physical_address_1_0
level1_1[1] = physical_address_1_1
...
level1_1[2^10-1] = physical_address_1_N
...
level0[N] = &level1_N[0]
level1_N[0] = physical_address_N_0
level1_N[1] = physical_address_N_1
...
level1_N[2^10-1] = physical_address_N_N
- one
directory
, which has2^10
elements. Each element contains a pointer to a page table array. - up to 2^10
pagetable
arrays. Each one has2^10
4 byte page entries.
2^10 * 2^10 = 2^20
possible keys.K-ary trees can save up a lot of space, because if we only have one key, then we only need the following arrays:
- one
directory
with 2^10 entries - one
pagetable
atdirectory[0]
with 2^10 entries - all other
directory[i]
are marked as invalid, don't point to anything, and we don't allocatepagetable
for them at all
These are some users Ciro Santilli particularly respects, mostly due to their contributions to systems programming subjects:
- unix.stackexchange.com/users/885/gilles-so-stop-being-evil
- stackoverflow.com/users/379897/r-github-stop-helping-icea
- stackoverflow.com/users/196561/osgx
- stackoverflow.com/users/50617/employed-russian Employed Russian. Binutils, ELF, GDB, claims to work at Google. The only Russian sounding name on GDB and Binutils git log is that of Paul Pluzhnikov: www.linkedin.com/in/paul-pluzhnikov-61b9676/ and Employed Russian mentions one of his commits at: stackoverflow.com/questions/3718072/gdb-takes-too-long-and-ctrl-c-has-no-effect Ex physicist: www.researchgate.net/profile/Paul_Pluzhnikov
Ciro also really likes the following users, a bit less like Gods, and bit more like friends:
- partly because they were close by on the yearly reputation charts for a long time circa 2020, so it feels like they also focus on replying to important questions rather than answering new duplicates immediately:
- stackoverflow.com/users/642706/basil-bourque: GCC dev, but started replying lots of Java questions as of 2021 it seems for some reason
- stackoverflow.com/users/541136/aaron-hall: Python, NixOS and Haskell more and more it seems. Also pro freedom of speech, gotta love those religious liberal Republicans. Reminds Ciro of Ron Maimon very slightly, maybe it's just the New Yorkedneess. Ciro once met another intelligent dude who liked both Haskell and NixOS, there must be some correlation.
- VonC: Git God, VonC is just Super nice, gives clear credit to others, always positive interactions. Love this dude. Twitter: twitter.com/VonC_. He was the one that held the Necromancer record in 2019 before Ciro took it.
- Peter Cordes. An assembly maniac this one. And a really nice one too. Sometimes pedantic, but always nice, and always correct. He's been going into God level more and more it must be said:
Other interesting people:
- stackoverflow.com/users/560648/lightness-races-in-orbit Lightness Races in Orbit. C++ God. Interesting aesthetics. Real name: Tom Lachecki, British, as per:As of 2023 marked "retired" from Stack Overflow, rep graph suggests since 2020.
- stackoverflow.com/users/3681880/suragch the number 3 necromancer dude. But then in 2022 he found God and mostly quit: suragch.medium.com/programming-was-my-god-89b625164a69
- www.reddit.com/r/webdev/comments/1ealv82/the_fall_of_stack_overflow/ The Fall of Stack Overflow
Page directory given to process by the OS:
entry index entry address page table address present
----------- ---------------- ------------------ --------
0 CR3 + 0 * 4 0x10000 1
1 CR3 + 1 * 4 0
2 CR3 + 2 * 4 0x80000 1
3 CR3 + 3 * 4 0
...
2^10-1 CR3 + 2^10-1 * 4 0
Page tables given to process by the OS at
PT1 = 0x10000000
(0x10000
* 4K):entry index entry address page address present
----------- ---------------- ------------ -------
0 PT1 + 0 * 4 0x00001 1
1 PT1 + 1 * 4 0
2 PT1 + 2 * 4 0x0000D 1
... ...
2^10-1 PT1 + 2^10-1 * 4 0x00005 1
Page tables given to process by the OS at where
PT2 = 0x80000000
(0x80000
* 4K):entry index entry address page address present
----------- --------------- ------------ ------------
0 PT2 + 0 * 4 0x0000A 1
1 PT2 + 1 * 4 0x0000C 1
2 PT2 + 2 * 4 0
...
2^10-1 PT2 + 0x3FF * 4 0x00003 1
PT1
and PT2
: initial position of page table 1 and page table 2 for process 1 on RAM.With that setup, the following translations would happen:
linear 10 10 12 split physical
-------- -------------- ----------
00000001 000 000 001 00001001
00001001 000 001 001 page fault
003FF001 000 3FF 001 00005001
00400000 001 000 000 page fault
00800001 002 000 001 0000A001
00801004 002 001 004 0000C004
00802004 002 002 004 page fault
00B00001 003 000 000 page fault
Let's translate the linear address
0x00801004
step by step:- In binary the linear address is:
0 0 8 0 1 0 0 4 0000 0000 1000 0000 0001 0000 0000 0100
- Grouping as
10 | 10 | 12
gives:which gives:0000000010 0000000001 000000000100 0x2 0x1 0x4
So the hardware looks for entry 2 of the page directory.page directory entry = 0x2 page table entry = 0x1 offset = 0x4
- The page directory table says that the page table is located at
0x80000 * 4K = 0x80000000
. This is the first RAM access of the process.Since the page table entry is0x1
, the hardware looks at entry 1 of the page table at0x80000000
, which tells it that the physical page is located at address0x0000C * 4K = 0x0000C000
. This is the second RAM access of the process. - Finally, the paging hardware adds the offset, and the final address is
0x0000C004
.
Page faults occur if either a page directory entry or a page table entry is not present.
The Intel manual gives a picture of this translation process in the image "Linear-Address Translation to a 4-KByte Page using 32-Bit Paging": Figure 1. "x86 page translation process"
x86 page translation process
. Good film about him: Blaise Pascal (1972).
Good quote from his Les Provinciales (1656-57) Letter XII, p. 227:French version reproduced at: www.dicocitations.com/citation/auteurajout35106.php.
The war in which violence endeavours to crush truth is a strange and a long one.All the efforts of violence cannot weaken truth, but only serve to exalt it the more.The light of truth can do nothing to arrest violence; nay, it serves to provoke it still more.When force opposes force, the more powerful destroys the less; when words are opposed to words, those which are true and convincing destroy and scatter those which are vain and false; but violence and truth can do nothing against each other.Yet, let no one imagine that things are equal between them; for there is this final difference, that the course of violence is limited by the ordinance of God, who directs its workings to the glory of the truth, which it attacks; whereas truth subsists eternally, and triumphs finally over its enemies, because it is eternal, and powerful, like God Himself.
Was the first model to explain the Balmer series, notably linking atomic spectra to the Planck constant and therefore to other initial quantum mechanical observations.
This was one of the first major models that just said:
I give up, I can't tie this to classical physics in any way, let's just roll with it, OK?
It still treats electrons as little points spinning around the nucleus, but it makes the non-classical postulate that only certain angular momentums (and therefore energies) are allowed.
Bibliography:
- Inward Bound by Abraham Pais (1988) Chapter 9.e Atomic structure and spectral lines - Niels Bohr
- The Quantum Story by Jim Baggott (2011) Chapter 3 A Little Bit of Reality
In the context of cryptography, authentication means "ensuring that the message you got comes from who you think it did".
Authentication is how we prevent the man-in-the-middle attack.
Authentication is one of the hardest parts of cryptography, because the only truly secure way to do it is by driving to the other party yourself to establish a pre-shared key so you can do message authentication code. Or to share your public key with them if you are satisfied with the safety of post-quantum cryptography.
What if Process 1 tries to access
0x00003000
, which is not present?The hardware notifies the software via a Page Fault Exception.
When an exception happens, the CPU jumps to an address that the OS had previously registered as the fault handler. This is usually done at boot time by the OS.
This could happen for example due to a programming error:but there are cases where it is not a bug, for example in Linux when:
int *is = malloc(1);
is[2] = 1;
- the program wants to increase its stack.It just tries to accesses a certain byte in a given possible range, and if the OS is happy it adds that page to the process address space, otherwise, it sends a signal to the process.
- the page was swapped to disk.The OS will need to do some work behind the processes back to get the page back into RAM.The OS can discover that this is the case based on the contents of the rest of the page table entry, since if the present flag is clear, the other entries of the page table entry are completely left for the OS to to what it wants.On Linux for example, when present = 0:
- if all the fields of the page table entry are 0, invalid address.
- else, the page has been swapped to disk, and the actual values of those fields encode the position of the page on the disk.
In any case, the OS needs to know which address generated the Page Fault to be able to deal with the problem. This is why the nice IA32 developers set the value of
cr2
to that address whenever a Page Fault occurs. The exception handler can then just look into cr2
to get the address.Neon isotope line split photograph by J. J. Thomson
. Source. J. J. Thomson took this picture in 1912:There can, therefore, I think, be little doubt that what has been called neon is not a simple gas but a mixture of two gases, one of which has an atomic weight about 20 and the other about 22. The parabola due to the heavier gas is always much fainter than that due to the lighter, so that probably the heavier gas forms only a small percentage of the mixture.
There are unlisted articles, also show them or only show them.