/*1* Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 20092* The President and Fellows of Harvard College.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7* 1. Redistributions of source code must retain the above copyright8* notice, this list of conditions and the following disclaimer.9* 2. Redistributions in binary form must reproduce the above copyright10* notice, this list of conditions and the following disclaimer in the11* documentation and/or other materials provided with the distribution.12* 3. Neither the name of the University nor the names of its contributors13* may be used to endorse or promote products derived from this software14* without specific prior written permission.15*16* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND17* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE18* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE19* ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE20* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL21* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS22* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)23* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT24* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY25* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF26* SUCH DAMAGE.27*/2829/* sort.c30* Test program to sort a large number of integers.31*32* Intention is to stress virtual memory system.33*34* Once the virtual memory assignment is complete, your system35* should survive this.36*/3738#include <stdlib.h>39#include <string.h>40#include <err.h>4142/* Larger than physical memory */43#define SIZE (144*1024)444546/*47* Quicksort.48*49* This used to be a bubble sort, which was ok but slow in nachos with50* 4k of memory and SIZE of 1024. However, with SIZE of 147,456 bubble51* sort is completely unacceptable.52*53* Also, quicksort has somewhat more interesting memory usage patterns.54*/5556static57void58sort(int *arr, int size)59{60static int tmp[SIZE];61int pivot, i, j, k;6263if (size<2) {64return;65}6667pivot = size/2;68sort(arr, pivot);69sort(&arr[pivot], size-pivot);7071i = 0;72j = pivot;73k = 0;74while (i<pivot && j<size) {75if (arr[i] < arr[j]) {76tmp[k++] = arr[i++];77}78else {79tmp[k++] = arr[j++];80}81}82while (i<pivot) {83tmp[k++] = arr[i++];84}85while (j<size) {86tmp[k++] = arr[j++];87}8889memcpy(arr, tmp, size*sizeof(int));90}9192////////////////////////////////////////////////////////////9394static int A[SIZE];9596static97void98initarray(void)99{100int i;101102/*103* Initialize the array, with pseudo-random but deterministic contents.104*/105srandom(533);106107for (i = 0; i < SIZE; i++) {108A[i] = random();109}110}111112static113void114check(void)115{116int i;117118for (i=0; i<SIZE-1; i++) {119if (A[i] > A[i+1]) {120errx(1, "Failed: A[%d] is %d, A[%d] is %d",121i, A[i], i+1, A[i+1]);122}123}124warnx("Passed.");125}126127int128main(void)129{130initarray();131sort(A, SIZE);132check();133return 0;134}135136137