CS - File writing process in Java (OS, interrupt, I/O perspective)


1. 자바에서 파일을 읽는 과정 (OS와 인터럽트, I/O 관점)

  • 자바에서 파일을 읽는 과정을 OS와 인터럽트 I/O 관점에서 보면 이러하다.
      String str = "Hello World !";
    
  • 해당 문자열을 파일에 쓰려고 한다.
      public class WriteToFileExample {
          public static void main(String[] args) {
    		
              // 파일 경로 설정
              String filePath = "path/to/your/file.txt";
    
              // FileWriter와 BufferedWriter를 사용하여 파일에 쓰기
              try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
                  // 파일에 쓸 내용
                  String str = "Hello World !";
    
                  // 파일에 내용 쓰기
                  writer.write(str);
    
              } catch (IOException e) {
                  // 파일 쓰기 중 예외 발생 시 처리
                  e.printStackTrace();
              }
          }
      }
    
  • 그럼 이렇게 File과 관련된 코드 중 writer.write(); 메서드가 동작하는 순간,
  • 우리 UserProcess(Java)는 System Call을 일으킨다. ( 이러한 행위 자체가 인터럽트이다. )
  • 그 때 동안은 Java 프로그램의 해당 스레드가 Blocking 상태가 된다.
  • str의 내용이 Kernel(OS)로 넘어가고,
  • Kernel에서는 str의 내용을 하드웨어에 작성한다. ( 파일이니까 Disk 헤더 어딘가에 )
  • 작성이 완료되면, 다 썼다고 UserProcess(Java)에 알려준다. ( 이것도 인터럽트이다 )
  • Ready, Running 상태로 순차적으로 진행되고,
  • 제어권은 다시 UserProcess로 넘어온다.


  • 인터럽트 발생은 사실상 CPU에 이거 해달라고 예약을 걸어두는 것이며, CPU가 항상 주기적으로 인터럽트 예약이 들어와있는지 확인하고, 진행한다.


  • 추가)
    • 예전에는 CPU가 I/O에 대한 버퍼를 직접 메모리에 올렸지만, 요즘은 DMA가 함. ( CPU는 비싼 자원이니 계산 위주로 동작하게끔 )
    • 또한 시스템 콜이라는 것을 알아야함. 위에서 말했듯 UserMode에서 커널로 동작을 요청하는게 시스템 콜임.
    • 근데 거기서 헷갈리면 안되는게 위에 Java라고 적어두긴했지만 Java가 직접 시스템콜을 하는건 절대 아님. Java를 다루고 있는 우리 OS의 UserMode에서 커널단으로 시스템콜을 날리는 것임.



공부 출처 : https://jongmin92.github.io/2019/02/18/Programming/computer-structure/#System-call






results matching ""

    No results matching ""