Public speaking course notes Read "Dynamo, Amazon’s Highly Available Key-value Store" Read "Bigtable, A Distributed Storage System for Structured Data" Read "Streaming Systems" 3, Watermarks Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

Add GDB support in Bochs environment and terminal output for an OS console

2018-02-25

Here is a guide on how to enable GDB debugger in Bochs environment. Also, for a specific project (TAMU CSCE 410/611 OS System, Machine Problem) with a provided system image, I included how to output kernel message in linux terminal. Special thanks to Min Qin who provided me with his GDB guideline, and Dr. Bettati’s notes.

Enable GDB debugger in Bochs environment

  1. Download bochs source files with gdb from https://sourceforge.net/projects/bochs/files/bochs/2.6.8/
  2. In the folder containing the downloaded file: tar xvzf bochs-2.6.8.tar.gz
  3. cd bochs-2.6.8
  4. sudo apt-get install libx11-dev
  5. sudo apt-get install libxrandr-dev
  6. sudo ./configure --enable-gdb-stub --with-x11
  7. sudo make
  8. sudo make install
  9. Add -g and -O0 options to the end of CPP_OPTIONs in makefile
  10. Remove the first line of linker.ld
  11. add gdb configuration to the bochs configuration file bochsrc.bxrc
    • gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
  12. write a .gdbinit file in the MP source directory
    • file kernel.bin
    • target remote:1234

Use GDB

  • In the project folder, type bochs -f bochsrc.bxrc
    • It may ask for options, 6 is what we need
  • Open a new terminal cd to the project folder, enter gdb
  • If you just want to continue without any breakpoint, just type c
  • To exit, kill then quit

Here is two very brief tutorial on how to use GDB: UMich GDB tutorial and CMU GDB tutorial

Terminal output

Steps to do linux terminal output are as below. It is better to add our Console::myPuts() method in Console::puts(), so every console output will be printed in linux terminal as well.

  1. Add port_e9_hack: enabled=1 in bochsrc.bxrc
  2. Add following methods in console.H/C. Use them for terminal output
  void Console::myPuts(const char * _s)
  {
    for (int i = 0; i < strlen(_s); i++) {
        Machine::outportb(0xe9, _s[i]);
    }
  }

  void Console::myPuti(const int _n)
  {
    char foostr[15];
    int2str(_n, foostr);
    myPuts(foostr);
  }

Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2024. All rights reserved by melonskin. Powered by Jekyll.