home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   alt.os.development      Operating system development chatter      4,255 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 3,425 of 4,255   
   Joe Monk to All   
   Re: segmentation   
   10 Nov 22 16:08:59   
   
   From: joemonk64@gmail.com   
      
   > No, that's not correct. If a program only ever populates the low    
   > 32 bits of registers, to use as addresses, then it is a 32-bit    
   > program.    
   >    
      
   Not on z/Arch.   
      
   ALL z/Arch memory access is by absolute address, which is always 64-bit.   
      
   "For purposes of addressing main storage, three basic types of addresses are   
   recognized: absolute, real, and virtual. The addresses are distinguished on   
   the basis of the transformations that are applied to the address during a   
   storage access. Address    
   translation converts virtual to real, and prefixing converts real to absolute."   
      
   "Absolute Address   
   An absolute address is the address assigned to a main-storage location. An   
   absolute address is used for a storage access without any transformations   
   performed on it.   
   The channel subsystem and all CPUs in the configuration refer to a shared   
   main-storage location by using the same absolute address. Available main   
   storage is usually assigned contiguous absolute addresses starting at 0, and   
   the addresses are always    
   assigned in complete 4 K-byte blocks on integral boundaries."   
      
   "Real Address   
   A real address identifies a location in real storage. When a real address is   
   used for an access to main storage, it is converted, by means of prefixing, to   
   an absolute address. At any instant there is one real-address to   
   absolute-address mapping for each    
   CPU in the configuration. When a real address is used by a CPU to access main   
   storage, it is converted to an absolute address by prefixing. The particular   
   transformation is defined by the value in the prefix register for the CPU."   
      
   >Just because someone moves a properly-written 32-bit program (that    
   >doesn't rely on address masking) from S/370 to z/Arch, doesn't    
   >magically turn it into a 64-bit program. Life would be so simple if    
   >it did. The bitness is decided at build time. ie how many address bits    
   >are populated, and whether the programmer is a jackass who relied    
   >on masking.    
      
   "A 24-bit or 31-bit virtual address is expanded to 64 bits by appending 40 or   
   33 zeros, respectively, on the left before it is translated by means of the   
   DAT process, and a 24-bit or 31-bit real address is similarly expanded to 64   
   bits before it is    
   transformed by prefixing. A 24-bit or 31-bit absolute address is expanded to   
   64 bits before main storage is accessed. Thus, the 24-bit address always   
   designates a location in the first 16 M-byte block of the 16 E-byte storage   
   addressable by a 64-bit    
   address, and the 31-bit address always designates a location in the first 2   
   G-byte block. ... Similarly, the sizes of the real or absolute addresses used   
   or yielded by the DAT, stacking, unstacking, and tracing processes are always   
   64 bits."   
      
   "whenever the machine generates and provides to the program a 24-bit or 31-bit   
   address, the address is made available (placed in storage or loaded into a   
   general register) by being imbedded in a 32-bit field, with the leftmost eight   
   bits or one bit in    
   the field, respectively, set to zeros."   
      
   Joe   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca