클록 하드웨어
컴퓨터에는 두 가지 클록이 일반적으로 사용된다. 단순한 클록은 110 혹은 220 볼트 전력 선으로 연결되어 있고 매 전압 주기마다 50 혹은 60 Hz에서 인터럽트를 발생한다. 이 클록은 많이 사용되었지만 지금은 거의 사용되지 않는다.
다른 종류의 클록을 보면 수정 진동자, 카운터 그리고 보유 레지스터 등으로 구성된다. 하나의 수정 결정 조각이 적절히 잘라져서 진동 장치에 마운트 되면 선택한 수정에 의존해서 수 백 MHz 범위에서 매우 정확한 주기적인 신호를 생산하게 된다. 전자회로를 이용해서 이 기본 신호는 1000 MHz 혹은 그 이상으로 증폭될 수가 있다.
어떤 컴퓨터에서도 컴퓨터의 다양한 회로에 신호를 동기화하기 위해 공급되는 적어도 하나의 비슷한 회로가 있다. 이 신호는 9까지 카운트할 수 있도록 카운터에 공급된다. 카운터가 0이 되면 CPU 인터럽트를 발생한다. 프로그램 할 수 있는 클록은 전형적으로 여러 개의 동작 모드를 지닌다. One-shot 모드에서는 클록이 시작했을 때, 보유하고 있는 레지스터의 값을 카운터에 복사하고 수정자의 각 펄스마다 카운터를 감소한다. 카운터가 0이 되면, 인터럽트를 발생하는데 그것이 소프트웨어에 의해서 명백하게 다시 시작할 때까지 멈춘다.
Square-wave 모드에서는 0이 되고 인터럽트를 발생한 다음, 보유하고 있는 레지스터는 자동적으로 카운터로 복사되고, 전체 프로세스는 무한정 다시 반복되게 된다. 이러한 주기적인 인터럽트는 클록 틱이라고 부른다.
프로그램 가능한 클록의 장점 중 하나는, 그것의 인터럽트 빈도 수가 소프트웨어로 조절될 수가 있다는 점이다. 만일 500 MHz 크리스털이 사용된다면, 컴퓨터는 매 2n sec마다 진동하게 된다. Unsigned 32 bit 레지스터로 인터럽트는 2n sec부터 8.6 sec까지의 간격으로 발생하도록 프로그램 될 수가 있다. 프로그램 가능한 클록 칩은 보통 둘 혹은 세 개의 독립적으로 프로그램 가능한 클록을 포함하며 다른 많은 옵션들을 가진다.
컴퓨터의 전원이 꺼지게 될 때, 현재 시간을 잃어버리지 않도록 대부분의 컴퓨터들은 디지털 시계에 사용되는 저-전력 회로 타입으로 구현된 배터리로 전원을 공급받는 백업 클록을 지닌다. 배터리 클록은 시작 시에 읽힐 수가 있다. 배터리 클록이 없으면, 소프트웨어는 사용자에게 현재 날짜, 시간을 물을 수가 있다. 네트워크로 연결된 시스템에 원격 호스트로부터 현재 시간 정보를 얻을 수 있는 표준 방식이 있다.
클록 소프트웨어
클록 하드웨어가 하는 모든 일은 알려진 간격으로 인터럽트를 발생하는 것이다. 시간을 포함해서 그 외에 모든 것은 소프트웨어인 클록 드라이버로 처리해야만 한다. 클록 드라이버의 정확한 의무는 운영체제마다 다르겠지만 보통은 이런 내용을 포함한다. 현재 시간을 유지하고 프로세스가 허용된 것보다 더 오랫동안 실행하지 않도록 하며 CPU 사용 시간을 계산하고 사용자 프로세스가 만든 알람 시스템 호출을 처리하는 것이다. 그리고 시스템 자체의 일부를 위한 워치독 타이머도 제공한다.
첫 번째 클록의 기능인 현재 시간 정보를 유지하는 것은 각 클록 틱 마다 카운터를 증가하는 것을 요구한다. 유일하게 관찰해야 하는 부분은 시각 카운터에서의 비트 수다. 60 Hz 클록 비율로, 32비트 카운터는 단지 2년만 지나면 오버플로우가 발생할 것이다.
이런 문제를 해결하기 위해서는 64비트 카운터를 사용할 수 있는데 카운터 유지를 위해서 일 초에 여러 번 해야 하기 때문에 카운터의 유지 자체가 부담스러워진다. 다른 방법은 1초가 될 때까지 틱을 세는 보조 카운터를 사용해서 시간을 틱이 아니라 초 단위로 유지하는 것이다.
다른 방법을 보면 틱을 세지만, 시스템이 부팅된 시간에 대해 상대적으로 계산하는 것이다. 백업 클록이 읽히거나 혹은 사용자가 실시간을 입력할 때, 시스템 부팅 시간이 현재 시간으로부터 계산되고 메모리에 저장된다. 추후에 시각 정보가 요청되면 저장된 시간이 현재 시간을 알아내기 위해서 카운터에 더해진다.
두 번째 클록 기능은 프로세스가 너무 오랫동안 실행하는 것을 방지하는 것인데, 프로세스가 시작될 때마다 스케줄러는 카운터를 프로세스의 할당 시간에 해당하는 클록 틱으로 초기화한다. 매 클록 인터럽트마다 클록 드라이버는 카운터를 1씩 감소한다. 0이 되면, 클록 드라이버는 스케줄러에게 다른 프로세스를 실행하게끔 요청한다.
세 번째 클록 기능은 CPU 사용 시간을 계산하는 것이다. 가장 정확한 방법은 프로세스가 시작할 때마다 메인 시스템 타이머와는 별도의 두 번째 타이머를 시작하는 것이다. 프로세스가 멈출 때 타이머는 그 프로세스가 얼마나 오랫동안 실행했는지를 알아내기 위해서 읽혀질 수가 있다. 정확성을 위해서 두 번째 타이머는 인터럽트가 발생할 때 저장되어야 하며 그 후에 복구되어야만 한다.
'컴퓨터&네트워크' 카테고리의 다른 글
입출력 장치들에 대해서 (1) | 2024.08.18 |
---|---|
컴퓨터 스케줄링 알고리즘 (1) | 2024.08.16 |
통신 장비 (0) | 2024.08.14 |
메모리와 입출력 (0) | 2024.08.14 |
운영체제의 개념 (0) | 2024.08.14 |