프로그래밍에서의 Context 의미

이강용·2024년 6월 5일
0

CS

목록 보기
36/109

Context의 일반적인 의미

  • 프로그래밍에서의 Context는 특정 작업이나 상태, 환경에 대한 정보를 캡슐화하는 것을 의미
  1. 상태 및 환경 정보 캡슐화 : 특정 작업이나 알고리즘을 수행하는 데 필요한 상태나 환경 정보를 캡슐화하여 전달하거나 관리한다.
  2. 작업 전환 관리 : 작업이 중된되고 나중에 같은 지점에서 계속될 수 있도록 상태를 저장하고 복구한다.

쓰임

데이터베이스 컨텍스트 (Database Context)

  • DB 컨텍스트는 DB 연결 및 트랜잭션 상태를 관리
    • Java의 Connection 객체나 ORM 프레임워크에서의 DbContext가 있음
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "user", "password");

웹 애플리케이션 컨텍스트 (Web Application Context)

  • 웹 애플리케이션 컨텍스트는 웹 애플리케이션의 구성 및 상태 정보를 관리한다.
    • Spring 프레임워크의 WebApplicationContext나 서블릿 컨텍스트가 이에 해당한다.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);

멀티스레딩 및 프로세스 컨텍스트 (Multithreading and Process Context)

  • 멀티스레딩과 프로세스 컨텍스트는 현재 실행 중인 스레드 또는 프로세스의 상태를 저장하고 복구하는 역할을 한다.

Java PCB(Process Control Block) 컨텍스트 스위칭

  • 스레드와 스레드 상태 관리를 통해 PCB와 비슷한 개념을 구현할 수 있다.
    • Java의 Thread클래스와 Runnable 인터페이스를 사용하여 스레드의 상태를 관리
class PCB {
    int pid;                    // Process ID
    String state;               // Process state
    int programCounter;         // Program counter
    int[] registers;            // CPU registers
    int priority;               // Process priority

    public PCB(int pid, String state, int programCounter, int numRegisters, int priority) {
        this.pid = pid;
        this.state = state;
        this.programCounter = programCounter;
        this.registers = new int[numRegisters];
        this.priority = priority;
    }

    public void saveState(int programCounter, int[] registers) {
        this.programCounter = programCounter;
        System.arraycopy(registers, 0, this.registers, 0, registers.length);
    }

    public void loadState() {
        // Load the saved state (this is a simplified example)
        System.out.println("Restoring state for process " + pid);
    }
}

public class ContextSwitching {
    public static void contextSwitch(PCB current, PCB next) {
        // Save the state of the current process
        int currentProgramCounter = 100; // Example value
        int[] currentRegisters = {1, 2, 3}; // Example values
        current.saveState(currentProgramCounter, currentRegisters);

        // Load the state of the next process
        next.loadState();

        // Update the process states
        current.state = "READY";
        next.state = "RUNNING";
    }

    public static void main(String[] args) {
        PCB process1 = new PCB(1, "RUNNING", 0, 3, 1);
        PCB process2 = new PCB(2, "READY", 0, 3, 1);

        contextSwitch(process1, process2);
    }
}
profile
HW + SW = 1

0개의 댓글