강좌 & 팁
글 수 2,412
2012.09.06 22:18:23 (*.52.177.29)
42768
커널 산책 - 함수와 시스템 콜 (4)
C 언어의 구조체를 이용하여 함수 테이블을 만들고
이 함수 테이블을 서로 다른 펌웨어 소프트웨어가 공유하는 방식은
기존에 프로그램을 작성하는 것과 차원이 다른 여러가지 효과가 생깁니다.
가장 큰 특징은
시스템 관련 소프트웨어 부분과
목적하는 기능을 담당하는 소프트웨어를
각각 별개로 프로그램이 가능하다는 점입니다.
함수명만 똑같다면 기능 구현을 담당하는 프로그래머는 하드웨어를 잘 몰라도 프로그램이 가능하게 됩니다.
예를 들어 LED 를 제어하고자 한다면 기능 구현 담당 프로그래머는 LED 관련 함수만 호출하면 됩니다.
LED 를 어떻게 제어해야 하는지를 알 필요가 없는 것이죠..
이런 방식에 또 다른 효과는
기능 구현 부분의 프로그램은 시스템이 바뀌어도 재 사용이 가능해 집니다.
하드웨어가 바뀌면 재 작성해야 하는 것은 하드웨어 제어 루틴쪽이죠.
동일한 함수 호출 규약만 지켜 준다면 말이죠..
이렇게 시스템 처리 와 응용 프로그램 처리가 나누어 지면서
응용 프로그램의 호환성을 유지하면서
하드웨어와 같은 시스템과 관련된 처리를 담당하는 함수를 "시스템 함수" 라고 부르게 됩니다.
기능을 구현을 하는 소프트웨어 즉 어플리케이션 또는 응용 프로그램은
해당 시스템을 제어하고 싶으면 시스템 함수를 호출하는데
이런 호출을 "시스템 호출 - System Call" 이라고 합니다.
이렇게 시스템 함수를 지원하는 펌웨어와 응용 프로그램 펌웨어가 나누어 작성되면서 많은 이점이 생겼지만
여전히 몇가지 문제점들은 있게 됩니다.
우선 대표적인 것인 두 펌웨어 사이에는 벡터 테이블의 주소를 공유해야 한다는 것입니다.
또 두개의 펌웨어 사이에 스택 공유와 같은 메모리 영역에 대한 비 분리 문제도 있게 됩니다.
이런 문제들을 제거하려고 펌웨어 프로그래머들은 고민하게 되다가...
발견한 것인 소프트웨어 인터럽트라는 것입니다.
인터럽트는 원래 하드웨어에 어떤 사건이 생기면 전기적으로 프로세서에 신호를 넣으면
이를 프로세서가 검출하고
현재 진행 중이던 루틴을 중단하고 미리 정의된 인터럽트 처리 함수를 수행하는 것이죠..
물론 인터럽트 처리 루틴은
기존의 CPU 상태를 저장하고
특정 행위를 한 이후
저장되었던 CPU 상태를 복구함으로써
인터럽트 이전에 수행되던 루틴은
인터럽트가 끝나면 아무일이 없던 것처럼 계속 진행이 가능하게 됩니다.
이런 하드웨어 인터럽트와 유사하게 소프트웨어 인터럽트는
마치 하드웨어 인터럽트가 일어난 것처럼
특정 프로세서 명령을 통하여 인터럽트가 발생하도록 할 수 있는데
이것을 소프트웨어 인터럽트라고 말합니다.
보통 소프트웨어 인터럽트는 어셈블러 명령으로 실행하는데..
i386 즉 PC 계열에서는 int 라는 명령이 있습니다.
요즘 많이 사용하는 ARM 은 SWI 라는 명령을 사용합니다.
저는 앞으로 ARM에 대해서만 설명할 것입니다.
요즘 대세는 ARM 이니까요..
이 소프트웨어 인터럽트를 어떻게 시스템 콜로 이용하는지는 다음 산택로에서 봅시다.
-------------------------------------------------------------------------------------
아..
짧군요..
뭐라 말하지 마세요
산책은 쉬엄 쉬엄 가라는 것이니까요.. ^^;
-------------------------------------------------------------------------------------