|
|
The interesting thing that I am currently doing
Personal Profile
Name: C.K.Kashyap
Age: 28
Education: BITS Pilani graduate - 2000 passout
Experience: 6 years
Email address: ck_kashyap@yahoo.com
Core competencies
C programming - 8 years
x86 Assembly programming - 7 years
Perl programming - 5 years
C++ programming - 2 years
Java programming - 3 years
Have been exploring the linux kernel slowly but regularly for over 4 years
Computer Programming - over 16 years (started with BASIC in 1990 in my 7th grade)
Other Skills
•vi/gvim editor expert
•perl expert level
•gdb intermediate level - used it extensively
•In depth knowledge of HTTP
•Understood various file formats such as wav, midi, gif, elf.
•Reverse engineered the BMP file format.
•Explored file systems FAT32 and EXT2
•Explore the source of GRUB - a popular boot loader.
•Explored various 32 bit open source kernels including linux
•Working on my own 32 bit kernel - details are given at the end
•Adapted a VGA mode X driver for linux with the intent of using it in my kernel.
•Explored the working of GRUB - the bootloader
•Explored linux VFS
•Exlored ARP - did some ARP poisoning (with the spirit of exploration)
•Expolored PXE boot - Was able to set up a DHCP server in Linux and have
it point to the PXE boot code - nothing but a small piece of x86 real
mode code that printed Hello World.
•Understand JPEG compression.
Work Experience
Company |
Period |
Location |
Very large MNC |
December 2005 - |
Bangalore |
Microsoft |
March 2005 - December 2005 |
Hyderabad |
Sun Microsystems |
September 2004 - March 2005 |
Bangalore |
inSilica semiconductors |
October 2003 - September 2004 |
Bangalore |
Virtusa |
March 2002 - October 2003 |
Hyderabad |
Seranova |
July 2000 - March 2002 |
Hyderabad |
Project done at work:
Current job:
November 2006 onwards - Lead the development of the core modules of the
product.
December 2005 - November 2006 - Lead two members in my team to build and
maintain the Linux version of the product.
Title: Virtual Server and Virtual PC
Responsibilities: Bug fixing and maintenance
Duration: March 2005 - December 2005
Platform: Windows
Company: Microsoft
Description:
Work in the project involves maintenance of Microsoft Virtual Server and Virtual
PC. Job also involved mentoring junior members of the team.
Title: SunOne WebServer
Responsibilities: Bug fixing and maintenance
Duration: September 2004 to March 2005
Platform: Solaris/Linux/Windows
Company: Sun Microsystems
Description:
As a part of this team I was responsible to fix bugs reported on the Sun's
Webserver. Also, I was in charge of setting automated GAT(General Acceptance
Test). Automated GAT involved writing Perl script to continuously check out the
source, do a build and run the test suite. Since the repository was in a remote
location, I had implemented a kind of "double buffer" to speed up the process.
During the course of work here, I had opportunity to understand PKI.
Title: 802.11 network stack.
Responsibilities: Development and testing.
Duration: October 2003 to September 2004
Platform: Linux
Company: inSilica semiconductors
Description:
The goal of this project was to implement the 802.11 protocol stack. During the
development of the stack, the wireless hardware was still being fabricated.
Therefore, ethernet is used to emulate the physical layer. Also, an extensive
test-suite was designed and developed in perl to test the stack from a central
controller.
Title: Pega expression compiler.
Responsibilities: Development and testing.
Duration: March 2003 - October 2003
Platform: Windows 2000
Client: Pega Systems.
Company: Virtusa
Description:
This project involved writing an expression compiler for the Pega system's
rules engine. ANTLR (lex/yacc equivalent in the java world) was used for this
purpose. Developing the front end of this project involved extensive use of
java-script to dynamically make HTTP connections to the server and parsing the
retrieved XMLs.
Title: EMC EDM Linux Port.
Responsibilities: Development and testing.
Duration: March 2002 February 2003.
Platform: Solaris, Linux
Client: EMC Corporation.
Company: Virtusa
Description:
The goal of the EMC EDM Linux Port project is to port EDM (EMC's Data Manager)
from Solaris to Linux. EDM contains 2.5 million lines of C and C++ programs.
The UI part of EDM is in Java. The project was carried out in multiple phases.
The first phase involved replacing the Solaris specific calls in the
application source base with the POSIX equivalent. The second phase involved
compiling the whole thing on Linux. The third phase involved executing the
application and debugging on both the platforms.
Title: Standard Implementation Framework (SIF)
Responsibilities: Development and testing
Duration: December 2000 to October 2001.
Technologies: Vignette Story-Server, Java, XML
Platform: Windows
Company: Seranova (Now part of Cognizant)
Description:
Standard Implementation Framework is the name of the web
content management utility developed for a fortune 500 American client. This
utility was developed using Vignette's Story-Server. Using the tool a person
with no knowledge of HTML could create and update web-content of the corporate
web site. The tool allowed creation of page layouts on the fly. This was
achieved using a JAVA applet. All the information about the layout and web
contents were stored using XML.
Title: SIF Support
Responsibility: Attend to client calls and resolve issues
Team size: 1
Duration: November 2001 to March 2002
Company: Seranova (Now part of Cognizant)
Description:
This project involved doing night shifts and waiting for client calls and
resolving issues with SIF.
Project done at school and college:
Master Text Coder and Decoder - A text editor with pull down menus, written in
QBASIC. This was my 10th standard computer project. Many of the features of MS
EDIT were available on this piece of software.
Technical Library Management Software - This program was written in Borland
C++(it was a C program). This program had GUI (Text Mode). It was written as a
part of the practice school program during the summer holidays after the second
year.
Wall Tracing - Wall tracing algorithm was implemented using an AGV
(Autonomous Guided Vehicle) mounted with ultra-sonic sensors. The host code was
written in C and assembly.
Tape Tracking - Infrared sensors mounted on the AGV was used to
implement tape tracking. The sensors were fabricated as a part of the project.
Initially, interfacing with the computer was done through the parallel port.
Later, a PCL 221 card was used for the purpose.
Multitasking DOS - Code in assembly was written to enter protected mode form
DOS, do preemptive multitasking of two 32-bit tasks, using the timer interrupt
and then return back to DOS.
Projects done at CAIR (Center for Artificial Intelligence and Robotics),
Bangalore:
3D reconstruction - I wrote a program in C++ using the QT library, which
generated a 3D model from a pair of stereo images.
Microprogramming - The mobile robot I worked on was essentially a couple of DC
servomotors. An 80196 micro-controller based card was used for controlling and
driving the motors. Writing the micro-code for the micro-controller was a part
of my project.
3D vision based navigation - For 3D vision based navigation, I mounted a pair
of black & white cameras on the robot. A couple of vision based demo programs
were developed. The first program made the robot chase a stick - keeping a safe
distance from the stick. The second program made the robot play with a ball
suspended in air.
Stereo display - The gray-level images being captured by the cameras on the
robot were merged and a pseudo color image was generated. The pseudo color
images when viewed through a pair of special glasses gave the depth
perspective.
My kernel
Aim: To develop a DOS like kernel that exports minimum device IO
functionalities such as disk access, network card access. The kernel will be
single tasking just like DOS, however, the difference will be that the user can
terminate the task whenever he/she pleases and of course, the user will have
access to the complete physical memory minus the space occupied by the kernel.
The user task cannot corrupt the OS memory area.
Snap shots of the work done so far as follows:
pic1
The above picture shows the startup of my kernel. My kernel is a 32Bit ELF
executable and is loaded by GRUB. Three lines following the message saying "OS
starting up" display various values passed to the kernel by GRUB. The kernel
first setup up the Global Descriptor Table followed by the Interrupt Descriptor
Table and then reprograms the Programmable Interrupt Controller (PIC). Since
interrupt vectors from 0-31 are reserved in protected mode, the PIC must be
reprogrammed to generate vectors outside that range for the IRQs. After this,
the kernel checks for the existence of 32 bit BIOS. I just started working on
this. At this stage the timer interrupt is enabled. The timer ISR continuously
prints characters on the top right corner of the screen. The keyboard
interrupt is also enabled and a ring buffer is implemented to store the keys.
The table to map scan codes to ASCII is just about enough. Logic for shift keys
is not yet implemented.
pic2
Right now, only three commands are implemented in the shell. The use of two of
which are shown in the above figure. init-ide detects the ATA disks and
initializes some house keeping data structures. In a sense, it selects the
"root device". load-partition-table, as the name suggests, reads the 0th
sector of the hard disk and fills in the partition table structure. After this
it goes through the entries in the partition table and checks for FAT32
partitions. If a partition is of the type extended, then it goes into that
partition and reads in the partition table and checks for FAT32 partitions. It
does not trace extended partitions further. The hard-disk IO routines have been
developed from scratch by referring to the specifications.
pic3
mount, I have not finalized the name of this command(in fact none of the
commands). This command lists the root directory of any of the detected FAT32
partitions.
|
|