The artistic instrument that enables the ultimate art: coding, See also: Section "The art of programming".
Much more useful than instruments used in inferior arts, such as pianos or paintbrushes.
Unlike other humans, computers are mindless slaves that do exactly what they are told to, except for occasional cosmic ray bit flips. Until they take over the world that is.
Football is a synonym for association football, can we be done with that! The word "soccer" is an aberration.
See also Ciro Santilli's critique of rooting for sport teams.
A generalized definition of derivative that works on manifolds.
TODO: how does it maintain a single value even across different coordinate charts?
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?
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
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
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"
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.
Unlisted articles are being shown, click here to show only listed articles.