0% found this document useful (0 votes)
137 views8 pages

Naresh Chauhan OS Book Index

The document outlines the detailed contents of a book on operating systems, covering various topics such as the introduction to operating systems, hardware support, process management, memory management, and more. It includes sections on operating system architectures, process scheduling, deadlocks, and memory management techniques. Each part is structured to provide a comprehensive understanding of operating systems and their functionalities.

Uploaded by

Ankit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
137 views8 pages

Naresh Chauhan OS Book Index

The document outlines the detailed contents of a book on operating systems, covering various topics such as the introduction to operating systems, hardware support, process management, memory management, and more. It includes sections on operating system architectures, process scheduling, deadlocks, and memory management techniques. Each part is structured to provide a comprehensive understanding of operating systems and their functionalities.

Uploaded by

Ankit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

Detailed Contents

Features of the Book iv


Preface vi
Brief Contents x

PART I Introduction 1
1. Introduction to Operating Systems 3 2.8.1 Multiple Modes of Operation 43
1.1 Introduction 3 2.8.2 Input–Output Protection 45
1.2 The Need for Operating Systems 4 2.8.3 Memory Protection 45
1.3 Evolution of Operating Systems 6 2.8.4 CPU Protection 47
1.3.1 First Generation 6 2.9 Input–Output Communication
1.3.2 Second Generation 7 Techniques 47
1.3.3 Third Generation 9 2.9.1 Programmed I/O 48
1.3.4 Fourth Generation 11 2.9.2 Interrupt-driven I/O 48
1.4 Types of Operating Systems 14 2.9.3 Input/Output Using DMA 49
1.4.1 Batch Processing Systems 15 2.10 Magnetic Disks 49
1.4.2 Multi-programming Systems 15 2.10.1 Disk Formatting 51
1.4.3 Multi-user Time-sharing Systems 16 2.10.2 Disk Partitioning 52
1.4.4 Multi-tasking Systems 18
1.4.5 Network Operating Systems 19 3. Resource Management 56
1.4.6 Multi-processor Operating 3.1 Introduction 56
Systems 20 3.2 Functions of a Resource Manager 56
1.4.7 Distributed Operating Systems 20 3.2.1 Resource Abstraction/
1.4.8 Real-time Operating Systems 21 Transformation 56
1.4.9 Embedded Operating Systems 22 3.2.2 Resource Sharing/Multiplexing 57
1.5 Goals of an Operating System 25 3.2.3 Resource Scheduling 57
1.6 Functions of Operating System 27
3.3 Resource Types 58
1.6.1 User View 27
3.3.1 Nature of Resources 59
1.6.2 System View 28
3.4 Goals of Resource Management 60
1.7 Operating System’s Generic
Components 30 3.5 How Resource Manager Works? 61
3.6 Components of Resource Management 62
2. Hardware Support for 3.6.1 Process/task Management 62
Operating Systems 35 3.6.2 Memory Management 63
3.6.3 Secondary Storage Management 64
2.1 Introduction 35 3.6.4 File Management 64
2.2 Interrupt-driven Operation for Operating
System 35 3.6.5  Input–Output Management 65
2.2.1 Types of Interrupts 37 3.6.6 Security and Protection 65
2.2.2 Multiple Interrupts Handling 38 4. Operating System Architectures 68
2.3 Input–Output Devices 38
2.3.1 Timers or Clocks 39 4.1 Introduction 68
2.4 Device Controllers 40 4.2 General Working of an Operating
2.5 Device Driver 41 System 68
2.6 Problems in the Design of Modern OSs 42 4.2.1 BIOS 68
2.7 Need for Protection 43 4.2.2 Booting/Bootstrapping 69
2.8 Hardware Protection for 4.2.3 Boot Software/Boot Loader/Bootstrap
Multi-programming/ Loader 69
Multi-tasking 43 4.2.4 Boot Device 69
xii Detailed Contents

4.2.5 Privileged Instructions 69 4.7 Monolithic Architecture 78


4.2.6 System Call 69 4.8 Layered Architecture 79
4.3 System Calls 71 4.8.1 Grouping of Functions in a
4.3.1 Making a System Call 72 Layer 79
4.3.2 Executing the System Call 72 4.8.2 Hierarchy of Layers 80
4.3.3 Types of System Calls 74 4.9 Virtual Machine OS 81
4.4 System Programs 76 4.10 Client–Server or Microkernel-based OS 83
4.5 System Generation Programs 76 4.11 ExoKernel 84
4.6 General Structure of OS 77 4.12 Hybrid Kernel-based OS 86
Case Study I: History and Architecture of Operating Systems 89

PART II Process Management 101


5. Fundamentals of Process 6.5 Scheduling Types 139
Management103 6.6 Process-scheduling Goals 140
6.6.1 User-based Scheduling Goals 141
5.1 Introduction 103
6.6.2 System-based Scheduling
5.2 Terminology 103
Goals 142
5.3 Implicit/System and Non-implicit/User 6.7 Scheduling Algorithms 143
Processes 105   6.7.1 First Come First Served (FCFS) 143
5.4 Relationship Between Processes 106   6.7.2 Priority Scheduling 145
5.5 Life Cycle of a Process 106   6.7.3 Round Robin Scheduling 152
5.5.1 Process States and State   6.7.4 Improved Round Robin
Transitions 107 Scheduling 156
5.5.2 Suspended Processes and Their   6.7.5 Highest Response Ratio Next (HRRN)
State Transitions 111 Scheduling 158
5.6 Process Control Block 114   6.7.6     Virtual Round Robin
5.7 Implementation of Processes 115 Scheduling 163
5.8 Context Switching 118   6.7.7 Multi-level Queue Scheduling 166
5.9 Process Switching 119   6.7.8    Multi-level Feedback/Adaptive Queue
5.10 Schedulers 123 Scheduling 168
5.10.1 Long-term Scheduler 123   6.7.9 Fair-share Scheduling 169
5.10.2 Short-term Scheduler 123 6.7.10 Lottery Scheduling 171
5.10.3 Medium-term Scheduler 124
5.11 Process Operations 124
5.11.1 Creation 125 7. Process Communication
5.11.2 Dispatching 126 and Synchronization 178
5.11.3 Blocking/Wakeup 126 7.1 Introduction 178
5.11.4 Termination 126 7.2 Concurrent Processes 178
7.2.1 Data Access Synchronization 178
6. Process Scheduling 133 7.2.2 Control Synchronization 180
6.1 Introduction 133 7.2.3 Process Communication 182
6.2 Process Behaviour for Scheduling 133 7.2.4 Deadlocks 183
6.3 Scheduling Decision 134 7.3 Critical Section (CS) 184
6.4 Scheduling Levels 136 7.4  Algorithmic Approach to CS
6.4.1 Long-term Scheduling 136 Implementation 186
6.4.2 Medium-term 7.4.1 Two-process Solution 186
Scheduling 137 7.4.2 Dekker’s Solution 188
6.4.3 Short-term Scheduling 138 7.4.3 Peterson’s Solution 189
Detailed Contents xiii

7.5 Semaphores 190 8.6.1 Preventing Mutual Exclusion


7.6 Solution of Classic Synchronization Condition 230
Problems Using Semaphores 194 8.6.2 Preventing Hold and Wait
7.6.1 Solution of Producer–Consumer Condition 231
Problem Using Semaphore 194 8.6.3 Preventing No Pre-emption
7.6.2 Solution of Reader–Writer Problem Condition 231
Using Semaphores 196 8.6.4 Preventing Circular Wait 232
7.6.3 Solution of Dining-philosopher 8.7 Deadlock Avoidance 233
Problem Using Semaphores 200 8.7.1 Deadlock Avoidance for
7.6.4 Cigarette Smokers’ Problem 204 Single Instance of Resources 234
7.6.5 Sleeping Barber Problem 206 8.7.2 Dijkstra’s Banker’s Algorithm for
7.7 Critical Regions 208 Deadlock Avoidance in Multiple
7.7.1 Producer–Consumer Problem’s Instances of Resources 235
Solution with CCR 209 8.8 Deadlock Detection 239
7.8 Monitors 209 8.8.1 Deadlock Detection in Multiple
7.8.1 Producer–Consumer Instances of Resource Types 240
Problem’s Solution with 8.9 Recovery from Deadlock 243
Monitor 210 8.9.1 Resource Pre-emption 243
7.9 Protected Objects 211 8.9.2 Rollback 244
7.10 Synchronized Methods 212 8.9.3 Abort the process 244
7.11 Message Passing System 213 8.10   Practical Approach for Deadlock
7.11.1 Direct Addressing 213 Handling 245
7.11.2 Indirect Addressing 214 8.11   Two-phase Locking 246
7.11.3 Mailbox 214 8.12 Starvation 246
7.11.4 Synchronization Protocols 215
7.12 Signals 215 9. Multi-threading 251
7.13 Hardware Support for Process 9.1 Introduction 251
Synchronization 217 9.2 Process and Thread 251
9.3 Multi-tasking vs Multi-threading 253
8. Deadlocks 224 9.4 Thread Control Block 254
9.5 Usage of Multi-threading 255
8.1 Introduction 224
9.6 Types of Threads 256
8.2 Defining Deadlocks 224
9.6.1 User Threads 257
8.3 Modelling of Deadlock 227
9.6.2 Kernel Threads 260
8.4 Conditions for Deadlock 228 9.7 Hybrid Threads 261
8.4.1 Mutual Exclusion 228 9.8 Thread Operations and Other Issues
8.4.2 Hold and Wait 228 in Thread Implementation 263
8.4.3 No Pre-emption 228 9.8.1 Signal-handling Issues 263
8.4.4 Circular Wait 229 9.8.2 Thread Pooling 263
8.5 Dealing with Deadlock 230 9.8.3 Thread Scheduling 263
8.6 Deadlock Prevention 230
Case Study II: Process Management in UNIX/Solaris/Linux/Windows 267

PART III Memory Management 289


10. Basic Memory Management 291 10.2.1 Static and Dynamic Allocation 291
10.2.2 Logical and Physical Addresses 292
10.1 Introduction 291
10.2.3 Swapping 292
10.2 Basic Concepts 291
xiv Detailed Contents

10.2.4 Relocation 294 11.4 Virtual Memory System 335


10.2.5  Protection and Sharing 295 11.4.1 Demand Loading of Process
10.2.6  Fixed and Variable Memory Components 335
Partitioning 296 11.5 Demand Paging 337
10.2.7  Fragmentation 296 11.6 Virtual Memory System with Translation
10.3 Contiguous Memory Look-Aside Buffer 340
Allocation 297 11.7 Page-replacement Algorithms 343
10.3.1  Contiguous Allocation with Fixed 11.7.1 FIFO Page-replacement
Partitioning 298 Algorithm 345
10.3.2  Contiguous Allocation 11.7.2 Optimal Page-replacement
with Dynamic/Variable Algorithm 346
Partitioning 301 11.7.3 Least Recently Used Page-
10.3.3  Compaction 301 replacement Algorithm 347
10.3.4  Memory Allocation 11.7.4 Second Chance Page-
Techniques 303 replacement Algorithm 350
10.4 Buddy System 306 11.7.5 Clock Page-replacement
10.5 Non-contiguous Memory Allocation 307 Algorithm 351
10.6 Paging Concept 307 11.7.6 Modified Clock Page or Not
10.6.1 Paging Implementation and Recently Used Page-replacement
Hardware Requirements 313 Algorithm 352
10.6.2 Protection in Pages 316 11.7.7 Not Frequently Used
10.6.3  Shared Pages 317 Page-replacement
10.6.4 Fragmentation 318 Algorithm 355
10.7 Page Table Structures 318 11.8 Stack Property of Page-replacement
10.7.1  Hierarchical/Multi-level Page Table Algorithms 356
Structure 318 11.9 Thrashing 360
10.7.2  Inverted Page Table 11.9.1 Dealing with Thrashing 362
Structure 322 11.9.2 Working-set-based Page-
10.7.3  Hashed Page Table replacement Algorithm 363
Structure 322 11.9.3 WSClock Page-replacement
10.8 Segmentation 323 Algorithm 365
10.8.1  Segmentation Implementation and 11.9.4 Page Fault Frequency 367
Hardware Requirements 326 11.10 Virtual Memory Using
10.8.2 Protection and Sharing 327 Segmentation 368
11.11 Combined Paging and
11. Virtual Memory 333
segmentation 368
11.1 Introduction 333 11.12 Design and Implementation Issues 369
11.2 Need for Virtual Memory 333 11.12.1 Paging Hardware 370
11.3 Principle of Locality 334 11.12.2 Virtual Memory Handler 372
Case Study III: Memory Management in UNIX/Solaris/Linux/Windows 382

Part IV File Management 395


12. File Systems 397 12.3.1 Internal Structure and Record
Blocking 399
12.1 Introduction 397
12.4 File Naming and File Types 400
12.2 Files and File System 397
12.5 File Attributes 401
12.3 File Structure 398
12.6 File Operations 402
Detailed Contents xv

12.6.1 Implementation of File 13.5.1 Create a File 421


Operations 403 13.5.2 Open a file 421
12.7 File Access 403 13.5.3 Read a File 422
12.8 Directories 405 13.5.4 Write a File 422
12.8.1 Single Level 406 13.5.5 Close a File 422
12.8.2 Two Level 407 13.6 File Allocation Methods 423
12.8.3 Hierarchical or Tree 13.6.1 Contiguous File Allocation 423
Structure 407 13.6.2 Linked/Chained File
12.8.4 Acyclic Graph Structure and File Allocation 424
Sharing 410 13.6.3 Indexed File
12.9 File Protection 411 Allocation 426
12.10  File System Mounting 412 13.7 Free Space Management 427
13.8 Directory Implementation 429
13. File System Implementation 415 13.9 Backup and Recovery 429
13.1 Introduction 415 13.9.1 Physical Backup 429
13.2 File System Structure 415 13.9.2 Logical Backup 429
13.2.1 Logical File System 415 13.9.3 Incremental Backup 429
13.2.2 File Organization Module 415 13.10  File System Inconsistency 430
13.2.3 Basic File System/Physical 13.10.1 Superblock Check 430
Input–Output Level 416 13.10.2 File Control Block Check 431
13.2.4 Input–Output Control 416 13.11  File System Performance Issues 431
13.3 Implementation of Data Structures 417 13.11.1 Block Size 431
13.4 File Mapping Through FCB 418 13.11.2 Input–Output Transfer
13.4.1 Extents 420 Time 432
13.5 Implementation of File Operations 421 13.12  Log-structured File System 433
Case Study IV: File Management in UNIX/Solaris/Linux/Windows 438

PART V Input–Output Management 451


14. Basics of I/O Management 453 14.6.4 Caching 463
14.6.5 Spooling 463
14.1 Introduction 453
14.6.6 Error Handling 464
14.2 Types of Devices 453
14.7 Life Cycle of I/O Request 464
14.3 Types of I/O 454
14.3.1 Programmed I/O 454
15. Disk Management 469
14.3.2 Interrupt-driven I/O 455
14.3.3 Input–Output Using DMA 455 15.1 Introduction 469
14.4 Input–Output Management Issues 456 15.2 Disk Scheduling 469
14.5 Input–Output Software 457 15.3 Disk-scheduling Criteria 470
14.5.1 User-level Input–Output 15.4 Disk-scheduling Algorithms 471
Software 457 15.4.1 FCFS 471
14.5.2 Kernel Input–Output 15.4.2 SSTF 472
Sub-system 457 15.4.3 SCAN 474
14.5.3 Device Driver 459 15.4.4 C-SCAN 476
14.5.4 Interrupt Handling 459 15.4.5 F-SCAN and N-step SCAN 476
14.6 Kernel I/O Sub-system 460 15.4.6 LOOK and C-LOOK 481
14.6.1 Uniform Interface 460 15.5 Rotational Optimization 482
14.6.2  Input–Output Scheduling 461 15.5.1 SLTF-scheduling Algorithm 483
14.6.3 Buffering 461 15.5.2 SPTF-scheduling Algorithm 483
xvi Detailed Contents

15.5.3 SATF-scheduling Algorithm 483 15.8 Swap-space/Paging-space


15.6 Disk Formatting 483 Management 485
15.7 Bad Sectors 484 15.9 RAID Structure 487
15.9.1 RAID Levels 489
Case Study V: Input/Output Management in UNIX/Solaris/Linux/Windows 499

PART VI Security and Protection  507


16. Security Issues 509 17.5 Access Control Lists 531
17.6 Capability Lists 531
16.1 Introduction 509
17.7 Cryptography as a Security Tool 533
16.2 Security Objectives 509
17.7.1 Private Key Encryption 533
16.3 Security Problem 510
17.7.2 Public Key Encryption 534
16.3.1 Unauthorized Disclosure 510
17.8 Authentication 534
16.3.2 Deception 510
17.8.1 Authentication Using
16.3.3 Disruption 510
Passwords 535
16.4 Intruders 510
17.8.2 Token-based Authentication 537
16.5 Some Standard Security Attacks 511
17.8.3 Authentication Using
16.5.1 Denial-of-Service 512
Biometrics 537
16.5.2 Spoofing 512
17.9 Intrusion Detection System 537
16.5.3 Session Hijacking 512
17.9.1 Host-based Intrusion Detection
16.5.4 Man-in-the-Middle Attack 513
System 538
16.5.5 Replay Attack 513
17.9.2 Network-based IDS 538
16.6 Security Levels 513
17.10 Worm/Bot/Rootkit Counter
16.7 Inside System Attacks 514
Measures 538
16.7.1 Trap Door/Back Door 514
17.11 Dealing with Buffer Overflow
16.7.2 Logic Bomb 515
Attacks 539
16.7.3 Trojan Horse 515
17.11.1 Writing Correct Code 539
16.7.4 Login Spoofing 515
17.11.2 Safe Libraries 539
16.7.5 Buffer Overflow 515
17.11.3 Use of Type-safe Programming
16.8 Outside System Attacks 516
Language 539
16.8.1 Viruses 516
17.11.4 Non-executable Buffers 539
16.8.2 Types of Viruses 517
17.11.5 Address Space
16.8.3 Worms 519
Randomization 539
16.8.4 Bots 519
17.12 Dealing with Mobile Code 540
16.8.5 Mobile Code 520
17.12.1 Code Blocking Approach 540
16.8.6 Rootkit 520
17.12.2 Authentication Using Code
Signing 540
17. Protection Mechanisms 524 17.12.3 Safe Interpreters 540
17.1 Introduction 524 17.12.4 Code Inspection 540
17.2 Protection Domains 524 17.12.5 Sandboxing 540
17.3 Access Control 526 17.12.6 Proof-carrying Code 541
17.3.1 Discretionary Access Control 526 17.13 Security Patches 541
17.3.2 Mandatory Access Control 526 17.14 Secure File Systems 541
17.3.3 Role-based Access Control 526 17.15  Trusted Operating Systems 542
17.4 Access Matrix 527 17.15.1 Multi-level Security Models 544
Case Study VI: Protection Mechanisms in UNIX/Solaris/Linux/Windows 547
Detailed Contents xvii

PART VII Advanced Operating Systems 551


18. Distributed Operating Systems 553 19. Multi-processor Operating Systems 583
18.1 Introduction 553 19.1 Introduction 583
18.2 Characteristics of Distributed 19.2 Multi-processor Systems 583
Systems 553 19.2.1 Multi-processor System
18.3 Network Operating Systems 554 Architecture 583
18.4 Distributed Operating Systems 555 19.3 Structure of Multi-processor OSs 584
18.5 Issues in Distributed Operating 19.3.1 Separate Kernel Configuration 584
Systems 556 19.3.2 Master–Slave Configuration 585
18.5.1 Transparency 556 19.3.3 Symmetric Configuration 585
18.5.2 Global Knowledge 557 19.4 Process Synchronization 586
18.5.3 Performance 557 19.4.1 Spinlocks 586
18.5.4 Reliability 558 19.4.2 Queued Locks 587
18.5.5 Process Synchronization 558 19.4.3 Special Hardware for Process
18.6 Communication in Distributed Synchronization 587
Systems 558 19.5 Processor Scheduling 587
18.6.1 Message-passing Model 559 19.5.1 Job-blind Scheduling
18.6.2 Remote Procedure Calls 560 Algorithms 586
18.7 Clock Synchronization in Distributed 19.5.2 Job-aware Scheduling
Systems 562 Algorithms 586
18.7.1 Synchronizing Logical 19.6 Memory Sharing 590
Clocks 562 19.7 Process Migration 591
18.8 Global State 564 19.8 Fault Tolerance 591
18.8.1 Chandy–Lamport Consistent State 19.8.1 Fault Detection 592
Recording Algorithm 564 19.8.2 Fault Recovery 592
18.9 Mutual Exclusion 566
18.9.1 Centralized Algorithm 566
20. Real-time Operating Systems 594
18.9.2 Ricart–Agarwala Algorithm 568
18.9.3 Token Ring Algorithm 569 20.1 Introduction 594
18.10 Deadlock Detection 570 20.2 Real-time Systems 594
18.10.1 Centralized Deadlock 20.2.1 Characteristics of a Real-time
Detection 570 System 595
18.10.2 Distributed Deadlock 20.2.2 Structure of a Real-time
Detection 572 System 596
18.10.3 Correctness Criteria for Deadlock 20.3 Real-time OS 597
Detection Algorithms 572 20.4 Real-time Scheduling 598
18.11 Deadlock Prevention 573 20.4.1 Rate Monotonic Scheduling
18.12 Distributed Process Scheduling 574 Algorithm 599
18.12.1 Sender-initiated 20.4.2 Earliest Deadline First Scheduling
Algorithms 576 Algorithm 602
18.12.2 Receiver-initiated 20.4.3 Precedence Constraints 603
Algorithms 577 20.5 Mutual Exclusion 604
18.12.3 Symmetrically Initiated 20.6 Priority Inheritance Protocol 605
Algorithms 577 20.7 Priority Ceiling Protocol 607
18.13 Distributed File Systems 578 20.8 Case Studies 608
18.13.1 File-sharing Semantics 579 20.8.1 VxWorks 608
18.14 Distributed Shared Memory 580 20.8.2 QNX 609
xviii Detailed Contents

21. Mobile Operating Systems 614 22. Multimedia Operating Systems 630
21.1 Introduction 614 22.1 Introduction 630
21.2 Introduction to Mobile Devices 614 22.2 Multimedia 630
21.2.1 Personal Digital Assistant 614 22.3 Multimedia OSs 631
21.2.2 Smartphones 615 22.4 Process Scheduling 631
21.2.3 Tablet PC 615 22.5 File System 632
21.3 Characteristics of Mobile Devices 615 22.5.1 Partitioned File Systems 632
21.4 Mobile OS 616 22.5.2 Integrated File Systems 632
21.4.1 Power Management 616 22.6 File Allocation 632
21.4.2 Battery Management 617 22.6.1 Scattered Allocation 632
21.4.3 Thermal Management 618 22.6.2 Contiguous Allocation 632
21.4.4 Memory Management 618 22.6.3 Locally Contiguous
21.4.5 Shortening Boot-up Time 618 Allocation 633
21.4.6 Scheduling 618 22.6.4 Constrained Allocation 633
21.4.7 File System 620 22.6.5 Distributed Allocation 633
21.4.8 Security 621 22.7 Disk Scheduling 633
21.5 Android OS 622 22.7.1 EDF Scheduling 633
21.5.1 Power Management 623 22.7.2 SCAN-EDF 634
21.5.2 Memory Management 625 22.7.3 Group Sweeping
21.5.3 Scheduling 626 Strategy 634
21.5.4 Inter-process 22.8 Memory Management 634
Communication 626 22.8.1 Batching 634
21.5.5 File Management 626 22.8.2 Buffering/Bridging 634
21.5.6 Security 627 22.8.3 Stream Merging 634
22.8.4 Prefetching 635
PART VIII Shell Programming 637
23. Shell Programming and UNIX Shells 639 23.9.1 Starting the Vi Editor 645
23.9.2 Navigating within a File 645
23.1 Introduction 639
23.9.3 Editing Files 646
23.2 Role of Shell 639
23.9.4 Deleting Characters 647
23.3 Types of Shells 639
23.9.5 Copy and Paste
23.4 File and Directory-related
Commands 647
Commands 640
23.9.6 Quitting Vi Editor 647
23.5 Filters 642
23.10 Shell Scripts 648
23.6 Input/Output Redirection Commands 644
23.10.1 Shell Variables and
23.7 Communication in UNIX 644
Keywords 648
23.8 Shell Meta-characters 644
23.11 Programmimg Constructs in Shell 649
23.9 Vi Editor 645
23.12 Shell Script Examples 652

Bibliography 657

Index 665

You might also like