[TIL] 2022.11.25. [System Programming]

2022. 11. 25. 21:43

시스템 프로그래밍의 예외적인 제어 흐름에 대해 알아볼 것이다.

 

컴퓨터는 단순한 한 가지 일만 한다.

 

전원이 들어간 후 instruction들만 반복적으로 한 번에 한 개씩 실행한다.

            => 이러한 명령어의 실행 흐름을 시스템의 물리적인 제어흐름이라고 한다.

 

제어흐름을 변경하는 방법에는 무엇이 있을까?

  • jumps와 branches 명령어
  • Stack을 사용한 Call과 return 명령어

가 존재한다.

 

BUT, CPU가 시스템의 상태변화에 대응하도록 하기는 아직 어렵다.

여러 가지 예외적인 상황이 존재한다.

이를 테면,

  • 하드 디스크나 네트워크 어뎁터에 데이터가 수신된 경우
  • 0으로 나누기를 시도할 때
  • 사용자가 ctrl-c를 눌렀을 때시스템 타이머가 초과되었을 때

 

시스템은 예외적인 제어흐름을 위한 메커니즘을 필요로 한다

" exceptional control flow "

 

이 예시에는 Youtube를 보다가 갑자기 kakao를 볼 수도 있는 상황에 대한 처리에 대한 것이다.

 


하위 매커니즘

- 예외

 

상위 매커니즘

- 프로세스 컨텍스트 전환

- 시그널

 

 

예외 상황(Exceptions)

특정 이벤트에 대한 반응으로 OS커널로 제어가 전환되는 것을 말한다.

-> 커널은 OS의 메모리 상주 부분이다.

-> 특정 이벤트의 예 : 0으로 나누기, 산술연산 overflow, 페이지 오류, I/O 종료, Ctrl + c 눌림 등

 

예외 테이블(Exception tables)

각 이벤트 타입은 예외 번호 k를 갖는다.

 

k = > exception table의 인덱스 (interrupted verctor라고도 불린다)

 

핸들러 k는 예외적인 k가 발생할 때 호출된다.

 

ECF (Exception Control Flow)

- Asynchronous

         -> interrupts

- Synchronous

         -> Traps

         -> Faults

         -> Aborts

 

비동기형 예외 (interrputs)

 

프로세서의 외부 사건으로부터 발생.

- 프로세서의 인터럽트 핀을 세팅해서 발생 표시

- 핸들러 실행 후, 인터럽트 작전 실행 명령어 다음 명령어로 복귀

 

ex)

  • 입출력 interrupts
    • ctrl + c
    • network에서 패킷이 들어옴
    • 디스크에서 한 개의 섹터가 읽혀 들어옴
  • 하드 리셋 interrupts
    • 컴의 리셋 단추 누름
  • 소프트 리셋 interrupts
    • 컴에서 ctl + alt + del을 누름

 

동기형 예외

 

  • Traps
    • 명령어의 결과로 발생하는 의도적인 예외
    • 처리 후 "다음" 명령어로 복귀
  • Faults
    • 핸들러가 정정할 수 있는 에러의 결과로 발생
    • Fault를 일으킨 명령을 다시 실행하거나 Abort한다.
  • Aborts
    • 하드웨어 오류와 같이 복구 불가능한 에러의 결과로 발생
    • 패러티 에러, 시스템 체크 에러
    • 응용 프로그램 복귀 불가로 현재 프로그램을 종료함.

 

x86-64 system call은 고유의 번호를 갖는다.

 

 

1. 시스템 콜 : 파일 열기

Call : open (filename, options)

      - __open함수를 호출하고, 이것은 시스템 콜 명령어인 syscall 호출

 

2. Faults : 페이지 오류

 

=> 찾고자 하는 내용이 page에 없을 때, "page fault"

disk 몇 GB에서 일부를 가상 memory로 book처럼 만들어낸다.

 

메모리 참조 시

- 사용자는 메모리에 쓰기 작업 수행

- 사용자 메모리의 특정 페이지가 현재 하드 디스크에 위치하는 경우

 

- 페이지 핸들러는 해당 페이지를 물리 메모리에 로드 해야한다.

- 이 때 페이지 오류가 발생한다

- 오류 처리 후에 오류를 발생키니 명령어를 다시 실행한다.

- 다시 실행할 때에는 접근이 성공한다.

 

=> 페이지를 생성하고, 메모리를 로드한다.

 

3. Processes

=> 프로세스는 운영체제가 만들어 주는 프로그램의 한 실행 예이다.

 

- 컴퓨터 과학 분야에서 가장 심오한 개념 중 하나

- 프로세스와 프로세서를 혼동하지 마라.

 

=> 프로세스는 프로그램에 두 개의 중요한 추상화를 제공한다.

- 논리적인 제어 흐름

      -> 각 프로그램이 CPU를 독점하는 것처럼 보이도록 한다.

- 사적인 주소 공간

      -> 각 프로그램이 주 메모리를 독점하는 것처럼 보이도록 한다.

 

"프로세스의 실행이 교대로 실행된다 (interleaved, multitasking)"

"주소 공간은 가상메모리 시스템에 의해 관리된다."

 

process의 실행을 위한 모든 정보 : context,,

 

(전통적 방식)

멀티 프로세싱

1. 단일 프로세서는 다수의 프로세스들을 동시에 실행함

2. 현재 레지스터들을 메모리에 보관

3. 다음 프로세스를 실행하기 위해 스케줄링

4. 보관된 레지스터들을 가져오고 주소공간을 전환 (문맥 전환 context switch)

 

(현대적 방식)

멀티 코어 프로세서

- 여러개의 CPU가 한 개의 칩에 포함

- 메인 메모리는 공유

- 각 코어는 별도의 프로세서를 실행 가능

 

 

 

동시성 프로세스

-> 두 프로세스는 그들의 실행 시간이 서로 충첩되며느 동시에 실행된다고 부른다. (concurrent)

그렇지 않으면, 순차적으로 실행된다고 정의한다. (sequential)

 

concurrent는 sequential에 비해 debugging이 까다롭다.

 

동시 프로세스들을 위한 제어흐름은 시간상으로는 물리적으로 분리된다.

그러나, 동시 프로세스들이 서로 병렬로 실행된다고 생각할 수 있다.

=> 멀티 테스킹 또는 타입ㅁ 슬라이싱이라고 부른다,,

 

 

문맥전환(Context Switch)

 

프로세스는 커널이라고 부르는 운영체제에 의해서 관리된다.

      = > 중요 : 커널은 프로세서가 아니며, 유저 프로세서의 일부분으로 실행된다.

 

한 개의 프로세스에서 다른 프로세스로 제어흐름이 넘어가는 것을 문맥전환 context switch 이라고 부른다.

 

 

 

 

※ 해당 글은 충남대학교 컴퓨터융합학부 김형신 교수님의 강의 자료를 바탕으로 만들어진 것입니다.

문제가 될 시 삭제하겠습니다.

 

BELATED ARTICLES

more