Saturday, July 30, 2022

Decision Making Statements in Programming Languages 1

if Statement

Flowchart





if else Statements

Flowchart



Nested if Statements

Flowchart



if else if Ladder

Flowchart



switch Statements

Java Syntax

switch(expression) {  
    case value_1:    statement_1; break;   
    case value_2:    statement_2; break;
    case value_n:    statement_n; break;
    default:         statement_d;
}

Important Keywords

  • case : Specifies the statements that should be executed if case is matched.
  • default : Specifies the statements that should be executed if case is not matched.
  • break : Terminates the execution of the switch block.Languages

Jump Statements

break

The break keyword exits from the current iteration and jumps to the instructions following the loop block.

Java Syntax

class Main {
    public static void main(String[] args) { 
        boolean stopThread = true;
        while(true) {
            System.out.println("Running thread");
            if(stopThread) {
                break;
            }
        }

    }
}

Flowchart



continue

Just like the break keyword the continue exits from the current iteration, but unlike the break it goes on to the following iterations.



In Java, you can use the break keyword to exit from a label block, an if-else block, switch case, or a loop block. Needles to say, you can’t use the continue keyword except in a loop.

goto

Using the goto aka unconditional jump, you force the program counter (PC) to jump to a specific instruction.

#include<stdio.h>

void foo(int num) {
    int n = 0;
    label:
    n++;
    printf("%d", n);
    if (n <= num)
        goto label;
}

Below is the output of the x86-64 gcc 12.1 compiler. I used this wonderful tool to generate compiler’s assembly output.

.LC0:
        .string "%d"
foo(int):
        push    rbp
        mov     rbp, rsp
        sub     rsp, 32
        mov     DWORD PTR [rbp-20], edi
        mov     DWORD PTR [rbp-4], 0
.L2:
        add     DWORD PTR [rbp-4], 1
        mov     eax, DWORD PTR [rbp-4]
        mov     esi, eax
        mov     edi, OFFSET FLAT:.LC0
        mov     eax, 0
        call    printf
        mov     eax, DWORD PTR [rbp-4]
        cmp     eax, DWORD PTR [rbp-20]
        jg      .L4
        jmp     .L2
.L4:
        nop
        leave
        ret

Although C/C++ supports the goto keyword, Java doesn’t. However, Java supports using labels.


public class Label {
    public static void main(String[] args) {
        label  : {
            if (condition) 
                    break label;
            // some other code that won't be executed if the condition is true
        }
    }
}

return

Syntax

return[expression];

The return keyword, terminates a function jumping back to the instruction following the function call. The return keyword is different from other jump statements as it is not conditional.

Resources

Saturday, July 17, 2021

Virtual Memory

 

Virtual memory is a separation of user logical memory from physical memory. 

 

  • Only part of the program needs to be in memory during execution. 
  • Logical address space can be much larger than actual physical space. 
  • Allows address spaces to be shared by several processes. 
  • Allows for more efficient process creation. 
  • Virtual memory can be implemented via demand paging or demand segmentation. 


 

Demand Paging 

Bring a page into memory only when it is needed. This results in less memory used, less I/O, faster response, and more users. 

 

When a page is needed: 

  • If the reference id is invalid: abort  
  • Otherwise: put it into memory 

 

With each page table entry a valid-invalid bit is associated. 


Virtual memory allows other benefits like: 

  1. Copy on Write  
  2. Memory mapped files