컴퓨터의 기본 구조는 이렇다.

컴퓨터를 부팅하고 나면 OS는 항상 메모리에 올라와 있으면서 사용자가 컴퓨터를 사용하는 것에 있어서 모든것을 관장한다. 

컴퓨터 실행은 위 그림과 같은 과정을 반복하는 것이 전부이다. 

인출단계: 메모리에서 프로그램 명령어를 읽어온다.

실행단계: 명령어에 따라 실행한다.

인터럽트: 실행단계 중 인터럽트가 들어왔나 확인한다. 인터럽트가 있었으면 인터럽트 단계를 실행하고 없었으면 인출단계부터 다시 반복

CPU가 하는 일이라곤 메모리에서 명령어(instruction)을 읽어와서 실행하는 것뿐이다.

어떤 일을 할지는 어떤 interrupt가 걸릴지, 어떤 프로그램의 명령어를 읽어오는 지에 달려있는 것이다. 


인터럽트가 걸리는 예시는 다음과 같다.

첫번째, 입출력 장치 구동이 필요할 때

프로그램A를 수행하는 중엔 CPU권한이 사용자 프로그램A에게 있다.

프로그램A를 수행하다가 I/O 입력을 받아야 되면 interrupt를 건다.

interrupt를 걸면 CPU권한이 OS로 넘어간다. OS에서는 프로그램A가 일으킨 interrupt코드를 수행한다. (interrupt코드는 커널함수에 포함되어 있음)

OS는 I/O device 수행에 관련된 일을 Device controller에게 넘기고

I/O에서 데이터를 읽어오는 것은 오래걸리므로 입출력이 끝날때까지 OS는 CPU 스케쥴링을 통해 다른 프로그램을 수행하도록 한다. CPU권한은 OS가 권한을 넘겨준 프로그램B에게 넘어가게 된다.


두번째, timer interrupt



하나의 사용자 프로그램이 CPU를 독점하는 것을 막기위해 timer를 사용하는데, 미리 설정해둔 시간이 지나면 사용자 프로그램에서 I/O입출력을 요청하지 않아도 interrupt를 timer에서 발생시켜 CPU권한을 OS로 넘겨준다. 사용자 프로그램A는 4번째 명령어를 실행하다가 인터럽트가 걸려 5번째 명령어를 실행하지 못하고 OS로 CPU권한이 넘어가는 것이다.

이렇게 하지 않으면 사용자프로그램에서 무한루프를 도는 경우 하나의 다른 프로그램을 실행할 수 없다. 

처음 내가 착각했던 것은 사용자 프로그램에서 OS로 CPU권한을 넘겨주는 것이 가능하다고 생각했다. 하지만 CPU권한을 누구에게 줄지를 결정하는 것은 OS만이 할 수 있다. 이 때문에 CPU권한을 다른 사용자 프로그램에게 넘기는 것이던, OS에게 넘기는 것이던 interrupt를 걸어서 일단 CPU권한을 OS로 넘겨줘야 한다.


운영체제가 하는 일은 이렇게 OS던 사용자 프로그램이던 프로그램이 실행되면서 자원을 사용하게 되는데 인터럽트를 이용해서 모든 프로그램이 자원을 공평하게 사용할 수 있도록 하는 것이다.

복잡한 컴퓨터 시스템 구조는 다음 그림과 같다. 차근차근 살펴보도록 하자.

 


1.1. Mode bit

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치가 필요하다. 예를 들어 사용자 프로그램이 운영체제 코드에 접근하여 수정을 했는데 오류가 있다면 이는 심각한 문제를 초래할 것이다.  
  • 이를 막기위해 Mode bit가 존재한다. 

    1 사용자 모드: 사용자 프로그램 수행

    0 모니터 모드: OS 코드 수행

-Iterrupt나 Exception이 발생하면 mode bit를 0으로 바꾼다.

- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit를 1로 바꾼다.

  • 한마디로 Mode bit가 0일 때는 어떤 일이든 실행가능하지만, 1일 때는 제한된 명령어만 실행 가능하다.


1.2 Timer

  • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
  • 타이머는 매 클럭 틱 때마다 1씩 감소
  • 타이머 값이 0이 되면 타이머 인터럽트 발생
  • CPU를 특정 프로그램이 독점하는 것으로부터 보호


'컴퓨터 공부 > 운영체제' 카테고리의 다른 글

network  (0) 2016.03.28
Process Synchronization  (0) 2016.01.24

http://resources.mpi-inf.mpg.de/yago-naga/javatools/

 

1. Download the javatools.zip from above site

   위의 사이트에서 javatools.zip 파일을 다운로드한다.

2. Decompress the .zip file

   .zip 파일 압축을 푼다.

3. Make file named "javatools" in the javatools file you just decompressed

   (I guess source of this library is set wrong path in the source code, so this step is neccessary to move source to the path that  is set)

   압축을 푼 javatools 파일 안에 "javatools" 이름으로 디렉토리를 하나 만든다.

   (소스코드의 파일 경로 설정이 잘못되어 있는 것 같다. 그러므로 설정 되어 있는 path로 소스코드들을 옮겨주는 이 단계는 아주 중요한 단계)

4. Move files which are in the bin directory to the "javatools"directoriy you just made

   bin 디렉토리에 있는 파일들을 모두 만들어준 "javatools" 디렉토리로 옮긴다.

5. Add javatools.zip as a library in the eclipse

   javatools.zip 을 이클립스에서 라이브러리로 추가한다

6. Use TSVWriter Class and write data you want

  이제 TSVWriter Class를 이용하여 TSV파일을 만들어주면 된다

Documentation

http://resources.mpi-inf.mpg.de/yago-naga/javatools/doc/javatools/filehandlers/package-summary.html

 

Example

http://www.jython.org/downloads.html

 

  1. Run "jython-installer-2.7.x.jar" as below command: java -jar jython-installer-2.7.x.jar
  2. Follow the instruction from Jython Installation pop up
  3. After successful installation set PATH as C:\jython2.7b1\bin
  4. Open command prompt and execute the command as below: jython --version
  5. The output as "Jython 2.7b1" would verify the complete installation and setting path

+ Recent posts