Like Tree55Likes

Need to know parameter format for a Call function?

This is a discussion on Need to know parameter format for a Call function? within the Tech Board forums, part of the Community Boards category; Originally Posted by Will1 What I was looking for is the speed of SQL data bases adding Rows and the ...

  1. #91
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    21,993
    Quote Originally Posted by Will1
    What I was looking for is the speed of SQL data bases adding Rows and the space SQL uses to store rows of data.
    The results will vary between specific relational database systems, their configurations, hardware and OS used, the specifics of the test, etc. If you do a search online to look for benchmark comparisons between various systems, you'll find endless critique on the benchmarks themselves, even when those doing the benchmarks try to be as objective as they can.

    Quote Originally Posted by Will1
    I changed the number of records to be added to 50,000 and ADAM took nearly a second to do it. Still twice as fast as you were able to achieve with adding rows to an SQL data base.
    For all we know if you do the test on your hardware, it will be twice as fast as ADAM... or maybe it will take several seconds. For example, using the same modified shell script, I get a wall clock time of under 1.6s for 50000 rows, i.e., twice as many rows was not twice as slow.

    Quote Originally Posted by Will1
    It used less than 26 Megabytes of disk space. How much space does an SQL data base with 512 byte rows take up on the hard drive?
    Again, the results will vary between specific relational database systems, their configurations, hardware and OS used, the specifics of the test, etc. The notion of "512 byte rows" also does not quite apply, e.g., unless otherwise specified, SQLite3 has a rowid column for each table. This column would be indexed, possibly requiring additional space beyond simple storage of an integer, but it means extremely fast row retrieval by rowid. Then there is likely to be other meta-data concerning tables, columns and specific fields, along with the various structures like B-tree that constitute the database itself, things that cater to much more than just insertions into the database. In my case, I get a 55 MB database file, but a little experimenting shows that the storage used is not linear, e.g., changing the first argument to the shell script to 250 reduces the size to just 50 MB, but changing it to 240 reduces it to 25 MB. Hence, it looks easy to compare: 26 MB versus 55 MB (and maybe versus 24.4 MB as a baseline for 50000 * 512 B), but in reality it would be naive since databases are used for much more than just insertion of records consisting of 512 byte strings.

    Quote Originally Posted by Will1
    We've wandered all over the place here so lets get back to the reason I started this thread. What I was really looking for is the expertise to help me create a server that allows clients to create and access an ADAM file. Since no-one seems to be interested in real software development I probably won't be posting much anymore. What I've done so far seems to be a waste of time.
    Agreed. It is unlikely that those around here who do have the particular expertise to help you will be inclined to do so given that you don't seem to have convinced anyone here that what you claim of ADAM is indeed accurate and worth the effort. I suggest that instead of dismissing what is current, you actually take time to experiment with them (and not just insertions, but the whole hog, e.g., retrieval, updating and deletions, and actually making use of foreign keys). Do not just look at relational database systems in current use, but also try out database systems with other approaches (particularly key-value stores).
    Last edited by laserlight; 07-27-2014 at 10:33 AM.
    stahta01 and Sebastiani like this.
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  2. #92
    Registered User
    Join Date
    Jul 2014
    Location
    Amarillo, Texas
    Posts
    104
    Quote Originally Posted by laserlight View Post
    The results will vary between specific relational database systems, their configurations, hardware and OS used, the specifics of the test, etc. If you do a search online to look for benchmark comparisons between various systems, you'll find endless critique on the benchmarks themselves, even when those doing the benchmarks try to be as objective as they can.

    For all we know if you do the test on your hardware, it will be twice as fast as ADAM... or maybe it will take several seconds. For example, using the same modified shell script, I get a wall clock time of under 1.6s for 50000 rows, i.e., twice as many rows was not twice as slow.
    My tests were done on a Pentium 4 processor, on a Dell GX 270, not the fastest PC around. Do you think that I could use "MYSQL" and build a server using ADAM as an engine for accessing data bases?

    Again, the results will vary between specific relational database systems, their configurations, hardware and OS used, the specifics of the test, etc. The notion of "512 byte rows" also does not quite apply, e.g., unless otherwise specified, SQLite3 has a rowid column for each table. This column would be indexed, possibly requiring additional space beyond simple storage of an integer, but it means extremely fast row retrieval by rowid. Then there is likely to be other meta-data concerning tables, columns and specific fields, along with the various structures like B-tree that constitute the database itself, things that cater to much more than just insertions into the database. In my case, I get a 55 MB database file, but a little experimenting shows that the storage used is not linear, e.g., changing the first argument to the shell script to 250 reduces the size to just 50 MB, but changing it to 240 reduces it to 25 MB. Hence, it looks easy to compare: 26 MB versus 55 MB (and maybe versus 24.4 MB as a baseline for 50000 * 512 B), but in reality it would be naive since databases are used for much more than just insertion of records consisting of 512 byte strings.
    Agreed, but it was just a test to see if the conversion from a DOS program to a Windows 32 bit program works and it and my other tests are working fine. (Note that I had to get around the "memory protection" feature of Windows and I did it with some success.)


    Agreed. It is unlikely that those around here who do have the particular expertise to help you will be inclined to do so given that you don't seem to have convinced anyone here that what you claim of ADAM is indeed accurate and worth the effort. I suggest that instead of dismissing what is current, you actually take time to experiment with them (and not just insertions, but the whole hog, e.g., retrieval, updating and deletions, and actually making use of foreign keys). Do not just look at relational database systems in current use, but also try out database systems with other approaches (particularly key-value stores).
    Agreed again: I haven't tested MASM32 ADAM with RRDS files but it will probably work. I have tested it extensively with KSDS
    which are much more useful than RRDS files anyway. The "insertions" and other test that I have done were with KSDS files.
    Last edited by Will1; 07-27-2014 at 12:31 PM.

  3. #93
    Registered User
    Join Date
    May 2009
    Posts
    2,703
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the Universe is winning." Rick Cook

  4. #94
    Master Apprentice phantomotap's Avatar
    Join Date
    Jan 2008
    Posts
    4,344
    For example, using the same modified shell script, I get a wall clock time of under 1.6s for 50000 rows, i.e., twice as many rows was not twice as slow.
    O_o

    There is a fairly significant bug in my script. I have no excuse; I simply forgot to account for the fact that a hexadecimal representation uses two characters per byte.

    You can try this version if you want to pretend, for whatever reason, to compare records of a more similar size.

    Code:
    ./sql.sh 512 100000
    timing build
    
    real 0m0.669s
    user 0m0.567s
    sys  0m0.100s
    99M  /tmp/tmp.TsuoZOn4uW/example.db
    keys 100000
    
    timing query 0
    
    real 0m0.051s
    user 0m0.017s
    sys  0m0.033s
    [Edit]
    I added "begin"/"commit" lines to the build file.
    [/Edit]

    Soma

    Code:
    #!/bin/bash
    #how many keys/searches are we going to fake
    QUERIES=$3
    #lazy attempt to account for the overhead of $rowid and $key
    ADJUST=$4
    
    if [[ -z "$ADJUST" ]]; then
      ADJUST=6
    fi
    
    if [[ -z "$QUERIES" ]]; then
      QUERIES=1
    fi
    
    if [[ "$1" -le "$ADJUST" ]]; then
      echo "\$1 needs to be greater than $ADJUST"
      exit 1
    fi
    
    COUNT=(0)
    SCRATCH=$(mktemp -d)
    trap 'rm -rf $SCRATCH' EXIT
    
    build() {
      local KEY
      local VALUE
      echo "CREATE TABLE mytable(key INT, value VARCHAR);"
      echo "BEGIN;"
      for KEY in $(seq $2); do
        KEY="$(dd if=/dev/urandom bs=1 count=1 2>/dev/null | hexdump -e \"%i\" 2>/dev/null)"
        KEY=$((KEY % $QUERIES))
        COUNT[$KEY]=$((COUNT[$KEY] + 1))
        VALUE=$1
        VALUE=$((VALUE + 1))
        VALUE="$(dd if=/dev/urandom bs=1 count=$((VALUE / 2)) 2>/dev/null | hexdump -e \"%.2x\" 2>/dev/null | colrm $((VALUE - ADJUST)))"
        echo "INSERT INTO mytable VALUES($KEY, \"$VALUE\");"
      done
      echo "COMMIT;"
    }
    
    query() {
      echo "timing query $1"
      echo "SELECT value FROM mytable WHERE (key==$1);" | sqlite3 "$SCRATCH/example.db" 1>/dev/null 2>/dev/null
    }
    
    echo "warning generating the build instructions may take some time"
    echo "sampling /dev/urandom like this is pretty dumb"
    
    build $1 $2 1>$SCRATCH/build
    
    echo "timing build"
    time sqlite3 "$SCRATCH/example.db" <$SCRATCH/build
    du -h "$SCRATCH/example.db"
    echo -e "keys\t${COUNT[@]}\n"
    
    for CURSOR in $(seq 0 $((QUERIES - 1))); do
      time query $CURSOR
      echo
    done
    Elkvis and Sebastiani like this.
    “Often out of periods of losing come the greatest strivings toward a new winning streak.” -- Fred Rogers
    “Salem Was Wrong!” -- Pedant Necromancer

  5. #95
    Registered User
    Join Date
    Oct 2006
    Posts
    2,511
    Quote Originally Posted by Will1 View Post
    OK Elk:
    I've asked you politely not to refer to me this way. I'm not your buddy. You don't get to give me a nickname. Please stop.

    Quote Originally Posted by Will1 View Post
    How do I go about acquiring a chunk of memory at execution time?
    Did you even bother to try to find out for yourself?

    On Windows, you would call the Win32 function VirtualAlloc. I don't know how to do this from assembly language, but I'm sure there's a reference out there somewhere that shows how to call the software interrupt directly, although I wouldn't count on the Win32 ABI being consistent from one version to the next. I don't think they're obligated to do that. You'd be better off linking with Kernel32.lib and calling the Kernel32.dll function from your code.

    On linux, you'd call brk. I've never used it, because I'm not an assembly language programmer, and I've always used malloc in C, or the new operator in C++.

    Quote Originally Posted by Will1
    You're talking about the smaller computers that still can be called "mainframes." Show me a "System" made up of PCs that will do what the IBM system 390 can do?
    In what capacity? What context? Please specify real features and performance targets that PCs fail to meet, for which a "System 390" is superior. System 390 is a 32-bit hardware platform, the most recent of which can address a maximum of 32GB of physical RAM, with 12 CPU cores. The last System 390 was made in 1999, according to the information I was able to find. By way of contrast, I have, in my server rack in the room adjoining my office, no less than three servers, much smaller in physical size, and much lighter in terms of power consumption, that have 64GB or more, and can address much, much more. Without looking it up, I'm pretty sure two of them will support up to 768GB of physical RAM. These machines also have 24 CPU cores, and can support up to 40. These are 64-bit machines.

    Quote Originally Posted by Will1
    You are completely ignorant of mainframe technology
    No. I worked on an IBM 715 for over a year, when I was 19 years old, at a company that likely built the walk-in cooler/freezer at your local McDonalds restaurant. I am not "completely ignorant of mainframe technology." I may not be the "expert" that you claim to be, but I am not ignorant.

    Quote Originally Posted by Will1
    ...whoever taught you to program computers was probably among the ignorant cadre of teachers that believe that PCs can do anything that a real mainframe can do.
    I learned almost everything I know about programming from independent study, and experience has shown me nothing about mainframes that is in any way superior to the PC-based client/server model that is common in this, the second decade of the 21st century. The terms "mainframe" and "server" are virtually interchangeable in every context of their use.

    Quote Originally Posted by Will1
    Show me a PC that can be accessing data from a hard drive concurrently with processing data that it has accessed from the hard drive previously. Only mainframes can do that. Normally, you access a mainframe using a PC to enter and retrieve data. The PC is used in the ways you mentioned when not accessing a mainframe.
    Look at literally any PC with more than one CPU core. These have been available for at least ten years, and have been quite common for more than five years. I think your information and your knowledge is a bit dated.

    Quote Originally Posted by Will1
    IBM's main Operating System is called MVS. It is a quantum leap ahead of Windows or Linux, or UNIX or any other Operating System.
    MVS has been discontinued (no support) for more than 13 years. There's no reason to even discuss it.
    Last edited by Elkvis; 07-28-2014 at 07:26 AM.
    Code:
    namespace life
    {
        const bool change = true;
    }

  6. #96
    Registered User
    Join Date
    Jul 2014
    Location
    Amarillo, Texas
    Posts
    104
    Quote Originally Posted by stahta01 View Post
    OK, I'll give you a history of how I may have been the original designer of VSAM.

    In 1969 I was working as a Customer Engineer for IBM in Denver. One day in 1969 I was told to go check on a problem that the !st National Bank of Denver had on their 360 system. The CE who normally serviced that account was out of town. I went and found out that the problem happened every now and then but I was able to track it down and find the hardware that caused the problem and replace it. The CIO wanted to talk to me. They were using the IBM Indexed Sequential Accass Method and it was notoriously a dog. He wanted to know if I could design a "Direct Access Method" to replace it.

    I told him I thought so and he hired me away from IBM. I started work on the Acces Method. A few weeks later I got called into his office to discuss the project. There were 2 IBM Sysems Engineers there so I asked why and was told that they would review what I was doing and let them know if it was feasable. I said OK because I wouldn't own the Access Method, the bank would.

    I laid out what was a very similar Access Method to VSAM except that I used "tracks" instad of "control intervals" (Whatever they are). Within a week the bank CIO layed me off and I figured that the IMB SEs told him it wouldn't work.

    In the early 1970s I was working on a deal I made with a company that hada a 360 system to develop the father of ADAM was working on that when IBM announced the release of VSAM. Kind of a co-incidence don't you think.

    KSDS is Key Sequenced Data sets, ESDS is Entry Sequrnced Data Sets, and RRDS is Relative Record Data Sets.

  7. #97
    Registered User
    Join Date
    Jul 2014
    Location
    Amarillo, Texas
    Posts
    104
    [QUOTE=Elkvis;1208594]I've asked you politely not to refer to me this way. I'm not your buddy. You don't get to give me a nickname. Please stop.[/QOTE]

    ELlkvis -That is a starange first name on a birth certificate, is that the name you would like to go by? My freiends and enemies call me Will but the first name on my wirth certificate ids "William' but I prefer that everybody, even people like you call me "Will." Maybe you should do that.

    As for the 64 bit version on the SYSTEM 390, refer to z/OS and you'l see the 64 bit version of the mainframe amd it doesn't need 2 "cores" (processors) to overlap internel and exeternal processing.

  8. #98
    Registered User Codeplug's Avatar
    Join Date
    Mar 2003
    Posts
    4,680
    >> ... and it doesn't need 2 "cores" (processors) to overlap internal and external processing.
    And neither do PC's. The CPU can be doing whatever the hell it wants while the bus/disk-controller/disk are servicing I/O requests.

    gg

  9. #99
    Registered User
    Join Date
    Oct 2006
    Posts
    2,511
    Quote Originally Posted by Will1 View Post
    ELlkvis -That is a starange first name on a birth certificate, is that the name you would like to go by? My freiends and enemies call me Will but the first name on my wirth certificate ids "William' but I prefer that everybody, even people like you call me "Will." Maybe you should do that.
    You choose to identify yourself as Will1 on this forum. I have not referred to you in any other way. I choose to identify myself as Elkvis. It would be appropriate and respectful for you to realize that, and behave accordingly. If you're 70+ years old, and haven't learned to respect the reasonable requests of others in the way you should address them, then you're probably beyond help.

    Quote Originally Posted by Will1 View Post
    As for the 64 bit version on the SYSTEM 390, refer to z/OS and you'l see the 64 bit version of the mainframe amd it doesn't need 2 "cores" (processors) to overlap internel and exeternal processing.
    This is largely irrelevant. Another forum member mentioned DMA. Without going into the technical details (mostly because I don't fully understand them myself), PCs and other devices derived from them, including servers, and many mainframes have a device called a DMA controller. DMA stands for Direct Memory Access. The DMA controller can be given instructions to perform operations on memory, such as reading and writing to a mass storage device, that run in the background while other processes run in the foreground on even a single core processor. I can virtually guarantee that your System 390 has such a device.
    Code:
    namespace life
    {
        const bool change = true;
    }

  10. #100
    Registered User
    Join Date
    Jul 2014
    Location
    Amarillo, Texas
    Posts
    104
    Quote Originally Posted by Elkvis View Post
    You choose to identify yourself as Will1 on this forum. I have not referred to you in any other way. I choose to identify myself as Elkvis. It would be appropriate and respectful for you to realize that, and behave accordingly. If you're 70+ years old, and haven't learned to respect the reasonable requests of others in the way you should address them, then you're probably beyond help.
    SORRY Elkvis! I don't know what your name is, apparently that's neither your first name nor a nickname your friends use to address you. I prefer just Will but someone else is using that ID on this forum. Personally, as I stated in my previous post, I don't care how many people know my first name, nor even my full name, "William R. Mattison." I don't really like people who are secretive. Maybe that's the reason you and I don't get along too well.

    Another forum member mentioned DMA. Without going into the technical details (mostly because I don't fully understand them myself), PCs and other devices derived from them, including servers, and many mainframes have a device called a DMA controller. DMA stands for Direct Memory Access. The DMA controller can be given instructions to perform operations on memory, such as reading and writing to a mass storage device, that run in the background while other processes run in the foreground on even a single core processor. I can virtually guarantee that your System 390 has such a device.
    Your guarantee is no good, the System 390 has only one processsor. I haven't researched "DMA" but I'll bet that it requires an extra processor in order to do the I/O while the main processor processes data internally. The mainframes, ever since the 1960s, have done concurrent processin of internal data and I/O operations with only one processor. Of course the I/O is done on a "channel" which is something that mainframes have but PCs don't have. To be honest this partucular discussion of a subject is of little import. How you accomplish concurrent processing whether by adding a processor, as PCs require, or with channels, as mainframes require, it can be done. The channel that the I/O is being done on has to interrupt the internal processor on the mainframe when it completes. I imagine the DMA has to interrupt the internal processor when the I/O that it is doing completes. Normally, whether you use the DOS interrupt 21 or whether you use the "INVOKE" under Windows, while the processor is busy doing the I/O the internal processing is stopped until the I/O completes. If, using my PC (Dell GX270 with a Pentium IV processor), I can use DMA, I'm not aware of it. Like I said, it is of little import and I' don't need to overlap I/O with internal processing unless I decide to write a decent Operating System (Not now available on PCs).

  11. #101
    Registered User Codeplug's Avatar
    Join Date
    Mar 2003
    Posts
    4,680
    >> I haven't researched "DMA" but I'll bet that it requires an extra processor in order to do the I/O while the main processor processes data internally.
    WRONG.
    DMA has been around since the first IBM PC (with 1 CPU).

    >> or whether you use the "INVOKE" under Windows, while the processor is busy doing the I/O the internal processing is stopped until the I/O completes.
    WRONG.
    Even when you issue a blocking read to the OS, the OS will simply execute other tasks while the IO is performed by hardware other than the CPU. This is how all modern OS's work.

    >> If, using my PC, I can use DMA, I'm not aware of it.
    Holy bat-$h1t! There really are old dogs that refuse to learn new tricks.
    I would say read post #68 again, but I doubt it would do any good.

    gg

  12. #102
    Registered User
    Join Date
    Oct 2006
    Posts
    2,511
    Quote Originally Posted by Will1 View Post
    I haven't researched "DMA" but I'll bet that it requires an extra processor in order to do the I/O while the main processor processes data internally.
    In modern computers (probably even the S/390), the DMA controller is not an "extra processor," but rather a component of the CPU itself, along with the memory controller and priority interrupt controller. Even on the original IBM PC/XT, the DMA controller was a separate IC, but it was not a "processor" in the way that you're thinking. It was a controller in much the same way as a disk drive or serial port controller.

    Quote Originally Posted by Will1 View Post
    The mainframes, ever since the 1960s, have done concurrent processin of internal data and I/O operations with only one processor.
    Nobody is arguing that point.

    Quote Originally Posted by Will1 View Post
    Of course the I/O is done on a "channel" which is something that mainframes have but PCs don't have.
    How can you possibly make authoritative claims like that if you haven't researched it?

    Quote Originally Posted by Will1 View Post
    To be honest this partucular discussion of a subject is of little import. How you accomplish concurrent processing whether by adding a processor, as PCs require, or with channels, as mainframes require, it can be done. The channel that the I/O is being done on has to interrupt the internal processor on the mainframe when it completes. I imagine the DMA has to interrupt the internal processor when the I/O that it is doing completes. Normally, whether you use the DOS interrupt 21 or whether you use the "INVOKE" under Windows, while the processor is busy doing the I/O the internal processing is stopped until the I/O completes. If, using my PC (Dell GX270 with a Pentium IV processor), I can use DMA, I'm not aware of it.
    The operating system handles DMA for you. You make a system call to read a file, and it coordinates all of the hardware actions necessary to accomplish that operation. The operating system issues commands to the DMA controller, the IDE/SATA/SCSI controller, and the PIC, to ensure that the data is read, and that the operating system is notified of it when it finishes. The reason you think processing stops when you do that is because you are making a call to a synchronous operation. Control of program flow does not return to you until the synchronous operation completes. The system is still performing other tasks while your process waits for the I/O operation to complete. Windows also supports asynchronous I/O, which allows you to initiate a file operation, and do something else while it's happening, and then you get a notification that it is finished.

    The fact is that you simply do not understand well enough the system that you are criticizing. You are expecting to have all of the same facilities and the same level of control that you have in a mainframe or DOS environment, and you simply cannot. As I mentioned very early in this thread, security is the primary concern, but reliability is a close second. If users are to expect their computers to function in a predictable way, then the operating system needs to rigidly enforce control over what every program is allowed to do. If you want to write your own operating system, then you get to decide what level of control user programs are allowed to have. Until you do, you'll have to defer to what the system allows, and quit complaining about things you clearly don't understand.
    Code:
    namespace life
    {
        const bool change = true;
    }

  13. #103
    Registered User
    Join Date
    Jul 2014
    Location
    Amarillo, Texas
    Posts
    104
    Quote Originally Posted by Elkvis View Post
    You are expecting to have all of the same facilities and the same level of control that you have in a mainframe or DOS environment, and you simply cannot.
    Why not?

    As I mentioned very early in this thread, security is the primary concern, but reliability is a close second. If users are to expect their computers to function in a predictable way, then the operating system needs to rigidly enforce control over what every program is allowed to do. If you want to write your own operating system, then you get to decide what level of control user programs are allowed to have. Until you do, you'll have to defer to what the system allows, and quit complaining about things you clearly don't understand.
    If I were to write an Operating system I would make the 3 low order bytes of the (E)CS, (E)DS, (E)ES, etc. registers available to a "Program." The High order byte would be off limits and that would be good enough to give every program 4 Gigabytes of it's own memory to use any way the programmer wanted and still maintain security. Changing the high order byte of those registers would be off limits. With the huge amounts of memory available today at a very low price it would be no problem giving every program 4 Gigabytes to use any way the programmer wanted. It seems that the designers of Windows, Linux, and whatever other "modern" Operating Systems are available are misers when it comes to the memory that is available to programmers. Maybe, since Linux is "Open Software," someone who has enough money, like Cisco Systems, will get together with me and we'll do it. I'd even be willing to go to Redmond, Washington to help Microsoft do it with a future version of Windows. It is just a matter of believing that it can be done regardless of what all the "Boo Birds" like you say.

    Anyway, I tire of this constant head-butting with you. It gains nothing but animosity. If you can't say something good, stop saying anything!
    Last edited by Will1; 07-29-2014 at 03:32 PM.

  14. #104
    Registered User
    Join Date
    Oct 2006
    Posts
    2,511
    Quote Originally Posted by Will1 View Post
    If I were to write an Operating system I would make the 3 low order bytes of the (E)CS, (E)DS, (E)ES, etc. registers available to a "Program."
    There is no ECS, EDS, or EES register in x86 architecture. They remain 16-bit registers, despite the update to 64-bit general purpose registers.

    Honestly, what good would that do? The bits of the register are irrelevant. The register as a whole is an index (called a selector) that the processor uses to lookup the segment information in a table. Incrementing (for example) the DS or ES or any other segment register would do nothing but retrieve the information for the next descriptor in the table. It may not be anywhere near the previous one in memory. You can't possibly know. They are not "base registers" as you say, but rather more analogous to page numbers, but the physical page can be anywhere in the book, not necessarily adjacent to the page of an adjacent number, and it can overlap with other pages. Which bits you are allowed to access is completely irrelevant. It's clear that you don't understand even the most basic principles of x86 memory protection. You understand 8086 real address mode, and you're insisting that modern operating systems should use that memory model because you (probably alone among all the programmers in the world) think it's better. Please read this page before you make any more ignorant assumptions about how memory works in x86 protected mode.

    Quote Originally Posted by Will1 View Post
    The High order byte would be off limits and that would be good enough to give every program 4 Gigabytes of it's own memory to use any way the programmer wanted and still maintain security.
    Please explain exactly which mechanism of an x86 processor in protected mode (the only way to access 4GB of memory) would allow that behavior.

    Quote Originally Posted by Will1 View Post
    It seems that the designers of Windows, Linux, and whatever other "modern" Operating Systems are available are misers when it comes to the memory that is available to programmers.
    False. Every Win32 process can access a 2GB memory space. If it's a 64-bit operating system, and the program is 64-bit aware, it can access a 4GB memory space, even if it's only a 32-bit process. A 64-bit process has effectively no limit on the size of the address space it can access. Linux is very similar, with some slight differences.

    Quote Originally Posted by Will1 View Post
    Maybe, since Linux is "Open Software," someone who has enough money, like Cisco Systems, will get together with me and we'll do it. I'd even be willing to go to Redmond, Washington to help Microsoft do it with a future version of Windows.
    Good luck with that. It's not a matter of money. It's a question of CPU architecture and hardware. The x86 family of processors simply does not work the way you think it does.

    Quote Originally Posted by Will1 View Post
    It is just a matter of believing that it can be done regardless of what all the "Boo Birds" like you say.
    Nobody said it can't be done. It just can't be done the way you want to do it. The way you want to do it is wrong, and relies on outdated technology. The other forum members and I have tried to offer alternatives to allow you to do what you want to do, but you just don't seem to care. You want to do it the way that you understand, even though that way is not possible anymore.

    Quote Originally Posted by Will1 View Post
    Anyway, I tire of this constant head-butting with you. It gains nothing but animosity. If you can't say something good, stop saying anything!
    I have yet to give you any bad information. The fact that you don't like the truth is not my problem. I will not water myself down to comfort your ignorance and stubbornness.
    Code:
    namespace life
    {
        const bool change = true;
    }

  15. #105
    Master Apprentice phantomotap's Avatar
    Join Date
    Jan 2008
    Posts
    4,344
    I have yet to give you any bad information. The fact that you don't like the truth is not my problem. I will not water myself down to comfort your ignorance and stubbornness.
    *bangs table*

    Hear, hear!

    Soma
    “Often out of periods of losing come the greatest strivings toward a new winning streak.” -- Fred Rogers
    “Salem Was Wrong!” -- Pedant Necromancer

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Function call Overhead and Function Call Stack
    By Alam Khan in forum C++ Programming
    Replies: 2
    Last Post: 04-26-2014, 08:28 AM
  2. Replies: 4
    Last Post: 10-03-2011, 06:30 AM
  3. Replies: 13
    Last Post: 08-24-2006, 12:22 AM
  4. Parameter in a function
    By cpluspluser in forum C++ Programming
    Replies: 2
    Last Post: 04-09-2003, 07:48 PM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21