KR19990076823A - Operating system kernel and how to filter events in it and how to implement semaphores - Google Patents

Operating system kernel and how to filter events in it and how to implement semaphores Download PDF

Info

Publication number
KR19990076823A
KR19990076823A KR1019980704949A KR19980704949A KR19990076823A KR 19990076823 A KR19990076823 A KR 19990076823A KR 1019980704949 A KR1019980704949 A KR 1019980704949A KR 19980704949 A KR19980704949 A KR 19980704949A KR 19990076823 A KR19990076823 A KR 19990076823A
Authority
KR
South Korea
Prior art keywords
event
thread
kernel
descriptor
events
Prior art date
Application number
KR1019980704949A
Other languages
Korean (ko)
Inventor
제임스 에이. 하우허
Original Assignee
파워티브이, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 파워티브이, 인코포레이티드 filed Critical 파워티브이, 인코포레이티드
Publication of KR19990076823A publication Critical patent/KR19990076823A/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Input From Keyboards Or The Like (AREA)

Abstract

가정용 통신 터미널용의 개선된 운영 시스템 커널(operating system kernel)이 특정 소스로 부터 또는 다른 바람직한 영역으로 부터 특정형의 이벤트에 관심을 등록하기 위해 HCT에서 스레드가 흐르도록 허가하는 이벤트 필터링 특성(204)을 포함한다. 시스템(205, 206)에 발생하는 이벤트는 특정형의 이벤트에만 관심을 등록하는 개별 스레드에 제공되기 앞서 커널에 의해 미리 자격이 주어진다. 커널의 문맥에서 필터를 이행함으로써, 스레드 문맥 스위치를 피할 수 있다. 시스템에서 발생하는 이벤트는 마스크 필드와 코드 필드를 포함하는 효율적인 비교 동작에 의해 다수의 스레드에 의해 등록된 관심의 이벤트(200a, 200b, 200c)와 매칭될 수 있다. 또한, 경고 및 신호기 등의 다수의 스레드 동기화 메카니즘이 이벤트 큐상에 집적되는 공통 이벤트 오브젝트를 사용하여 실행될 수 있다.Event filtering feature 204 that allows an improved operating system kernel for home communication terminals to allow a thread to flow in an HCT to register interest in a particular type of event from a particular source or from another desired area. It includes. Events that occur in systems 205 and 206 are prequalified by the kernel before being provided to individual threads that register interest only on certain types of events. By implementing filters in the kernel context, you can avoid thread context switches. Events occurring in the system may be matched with events of interest 200a, 200b, 200c registered by multiple threads by an efficient comparison operation including a mask field and a code field. In addition, multiple thread synchronization mechanisms, such as alerts and signals, can be implemented using a common event object that is integrated on the event queue.

Description

운영 시스템 커널 및 이것에서의 이벤트 필터링 방법과 세마포 기능 구현 방법Operating system kernel and how to filter events and implement semaphores in it

본 발명은 일반적으로 고성능 용도에 적합한 실시간 운영 시스템(real-time operating systems) 예를 들어 케이블 텔레비젼 또는 다른 오디오비주얼 능력(cable television or other audiovisual capabilities)을 제공하기 위해 가정용 통신 터미널(home communications terminal (HCT))에서 실행하는 것들에 관한 것이다. 특히, 본 발명은 제한적인 컴퓨팅 자원(computing resources)을 가진 디바이스 내에 설치된 운영 시스템의 성능을 향상시키는 특징(feature)을 제공하는 것에 있다.The present invention generally provides a home communications terminal (HCT) to provide real-time operating systems suitable for high performance applications, such as cable television or other audiovisual capabilities. It's about doing things in)). In particular, the present invention is directed to providing a feature that enhances the performance of an operating system installed in a device having limited computing resources.

<관련 정보><Related Information>

HCT용의 통상적인 운영 시스템 예를 들어 케이블 텔레비젼 시스템의 것들에 의해서 전형적으로 제공되는 능력은 제한적인 것으로서, 이 제한적인 능력 범위 내에서만 사용자가 하드웨어 디바이스를 제어하고 제한적인 메뉴 및 디스플레이(limited menus and displays)에 따를 수 있다. 케이블 텔레비젼 산업의 성장으로 대화식 비디오 게임(interactive video games), 주문형 비디오(video-on-demand), 다운로드가능 어플리케이션(downloadable applications), 고성능 그래픽(higher performance graphics), 멀티미디어 어플리케이션(multimedia applications) 등을 비롯한 새로운 능력이 예견됨에 따라, 이들 새로운 능력을 지원할 수 있는 HCT용의 운영 시스템을 제공해야 할 필요성이 증대되어 왔다. 또한, 새로운 세대의 광섬유를 기반으로 하는 네트워크(fiber-based network)가 등장함에 따라, 개별 가정으로 또한 그로부터 전송될 수 있는 데이터 대역폭이 크게 증가됨으로써 HCT의 완전히 새로운 용도가 개발될 수 있게 되었다. 미국 연방법 및 주법이 개정됨에 따라 또한 새로운 용도 예를 들어 기존 케이블 네트워크를 통한 전화 통신이 예고되고 있다. 그 결과, 종래의 HCT 및 그의 운영 시스템은 빠른 속도로 쇠퇴해 가고 있다. 간단히 말해서, HCT는 현재의 제한적인 능력을 가진 텔레비젼 세트에서 대화식 멀티미디어 오락 및 통신 시스템으로 전환될 필요가 있다.The capabilities typically provided by conventional operating systems for HCTs, such as those of cable television systems, are limited, and within this limited capability range, users control hardware devices and have limited menus and displays. depending on the displays). The growth of the cable television industry includes interactive video games, video-on-demand, downloadable applications, higher performance graphics, multimedia applications, and more. As new capabilities are anticipated, the need to provide an operating system for HCT that can support these new capabilities has increased. In addition, the emergence of a new generation of fiber-based networks has resulted in a significant increase in the data bandwidth that can be transmitted to and from individual homes, enabling the development of completely new uses for HCT. As US federal and state laws are revised, new uses, such as telephony over existing cable networks, are foreseen. As a result, the conventional HCT and its operating system are rapidly declining. In short, HCT needs to be switched from current limited television sets to interactive multimedia entertainment and communication systems.

HCT의 능력을 증대시킬 수 있는 한가지 가능한 해결책은 기존의 운영 시스템 예를 들어 UNIX 등을 HCT의 PC-호환 마이크로프로세서(PC-compatible microprocessors)에 도입하는 것이다. 그러나, 그러한 기존의 운영 시스템을 지원하는데 필요로 하는 막대한 크기의 메모리 요건으로 인해서, 그러한 해결책은 거의 수용할 수 없을 정도의 막대한 비용을 필요로 한다. 메모리는 HCT에서 고가의 부품이기 때문에, 그에 따른 가격 압력을 고려하여, 기능 추가는 메모리의 사용을 최소화하고 프로세서의 성능은 극대화하는 식으로 행해져야만 한다. 따라서, 메모리 요건을 최소화하면서도 미디어-중심의 고성능 특징(media-centric high performance features)을 제공하는 새로운 운영 시스템이 개발되어야만 할 것으로 판단된다.One possible solution to increase the capabilities of HCT is to introduce existing operating systems, such as UNIX, into HCT's PC-compatible microprocessors. However, due to the enormous size of memory requirements needed to support such existing operating systems, such solutions require almost unacceptably high costs. Since memory is an expensive component in HCT, considering the resulting price pressures, the addition of functionality should be done in such a way as to minimize the use of memory and maximize the performance of the processor. Accordingly, it is believed that new operating systems must be developed that provide media-centric high performance features while minimizing memory requirements.

통상 대규모 메모리를 요구하는 것으로 판단되는 한 가지 종래 운영 시스템 구성의 전형적인 예는 스레드 조정 메카니즘(thread coordination mechanisms) 예를 들어 세마포, 타이머, 예외, 메시지(semaphores, timers, exceptions, messages) 등을 운영 시스템내의 개별적인 서브시스템들로 분할하는 것이다. 이러한 각 서브시스템은 통상적으로 여러 다른 어플리케이션 인터페이스(API) 규칙(application programming interface (API) conventions), 여러 다른 데이터 구조(data structures) 및 여러 다른 메모리 영역(memory areas)을 포함하는데, 이들은 커널에 의해서 추적 및 검사된다.A typical example of one conventional operating system configuration that is typically determined to require large amounts of memory is the operating system for thread coordination mechanisms such as semaphores, timers, exceptions, timers, exceptions, messages, etc. It is split into individual subsystems within it. Each of these subsystems typically includes different application programming interface (API) conventions, different data structures, and different memory areas, which are driven by the kernel. Are traced and inspected.

실시간 운영 시스템에서 비효율성을 야기하는 것으로 판단되는 다른 종래 운영 시스템 구성의 전형적인 예는 이벤트가 그 시스템에서 실행되는 스레드로 전달되게 하는 것이다. 이벤트를 스레드로 전달하는 종래의 방법은 스레드를 스케쥴링하고 이벤트가 그 스레드에 대해 관심 밖의 것일 지라도(스레드가 이벤트의 수신후 그 이벤트가 관심 밖의 것이어서 그 이벤트를 폐기할 것을 즉시 결정한다고 할 지라도) 그 이벤트를 스레드에 제공하는 것을 포함한다. 따라서, 이러한 방법에서는, 문맥 전환(context switch)을 수행하는 처리 시간이 낭비되며 또한, 메모리 공간이 낭비된다.A typical example of another conventional operating system configuration that is believed to cause inefficiency in a real-time operating system is to have an event delivered to a thread running on that system. Conventional methods of delivering an event to a thread schedule the thread and even if the event is of no interest to the thread (even if the thread decides immediately after receipt of the event that event is out of interest and discards the event). This includes providing events to the thread. Thus, in this method, processing time for performing a context switch is wasted, and memory space is wasted.

일 예로서, 사용자가 HCT 키이패드 상의 키이를 누른 경우, 텔레비젼 스크린 상의 커서가 소정 윈도우내에 위치하지 않아 그 이벤트가 와 것일 지라도 종래의 커널은 그 이벤트를 그 이벤트의 처리 스레드에 전달한다. 따라서, 비효율성의 문제가 대두되는데, 그 이유는 스크린 상의 커서 위치로 인해 그 이벤트가 와 것이라고 신속하게 판단하기 위한 문맥 전환 및 그에 후속하는 스레드가 스레드 실행에 포함되기 때문이다. 다른 많은 예의 이러한 비효율성은 시스템의 스레드가 커널로부터 수신하게 되는 이벤트를 그 스레드에 의해 사전에 한정할 수 없다는 사실로부터 초래된다.As an example, when a user presses a key on the HCT keypad, the conventional kernel delivers the event to the processing thread of the event even if the event is coming because the cursor on the television screen is not located within a given window. Thus, the issue of inefficiency arises because the thread position on the screen involves a context switch to quickly determine that the event is coming and subsequent thread execution. In many other examples, this inefficiency results from the fact that a thread in the system cannot receive events by that thread in advance.

요약컨대, HCT용으로 사용되는 종래의 운영 시스템은 새로운 고성능의 그래픽-강조 어플리케이션(graphics-intensive applications)에 사용될 때 그들의 유용성을 가로막는 성능 및 메모리 면에서의 단점을 갖고 있다. 따라서, 운영 시스템과 관련하여 실행하는 어플리케이션의 전반적인 성능을 향상시킴과 동시에 메모리 요건을 감소시킬 수 있는 운영 시스템 특징을 제공할 필요가 있다.In summary, conventional operating systems used for HCT have disadvantages in terms of performance and memory that prevent their usefulness when used in new high performance graphics-intensive applications. Thus, there is a need to provide operating system features that can reduce memory requirements while improving the overall performance of applications running in connection with the operating system.

발명의 개요Summary of the Invention

본 발명에 있어서는, HCT 어플리케이션의 필요성에 맞춘 특징을 가진 효율적인 실시간 커널을 제공함으로써 전술한 문제점을 해결한다. 종래의 커널은 전형적으로 개별적인 이벤트 서브시스템, 세마포 서브시스템 및 큐 서브시스템(queue subsystems)을 제공하는 반면에, 본 발명의 일 실시예에서는 그들 서브시스템을 이벤트 큐 상의 이벤트들을 통해 세마포 및 다른 동기 메카니즘의 기능성을 제공하는 단일의 통합된 이벤트 서브시스템으로 대체하고 있다. 또한, 상기한 여러 다른 서비스를 제공하기 위해서 여러 다른 데이터 구조를 사용하는 대신에, 이 실시예에서는 단일의 이벤트 데이터 구조를 사용할 수 있다. 또한, 이 실시예에서는 단일의 데이터 구조를 최적화하여 커널의 속도를 높일 수 있다. 또한, 이 실시예에서는 커널은 각 스레드에 대해 (스레드를 실행하는 또는 스레드로의 전달을 위해 이벤트를 기다리는) 두 가지의 상태만을 알면 되기 때문에, 커널 효율성을 향상시킬 수 있다. 이와는 대조적으로, 종래의 커널은 전형적으로 커널이 여러 가지 상태 예를 들어 세마포 대기, 이벤트, 메시지 스트림 또는 I/O 동작 등과 같은 상태들을 구별해야만 하므로, 커널에서의 복잡성이 증대되고 또한 메모리 요건이 증대된다.In the present invention, the above-mentioned problem is solved by providing an efficient real-time kernel having a feature adapted to the needs of the HCT application. Conventional kernels typically provide separate event subsystems, semaphore subsystems, and queue subsystems, while in one embodiment of the present invention, these subsystems can be configured via semaphores and other synchronization mechanisms through events on the event queue. It is being replaced by a single integrated event subsystem that provides the functionality of. In addition, instead of using different data structures to provide the different services described above, a single event data structure may be used in this embodiment. In addition, in this embodiment, a single data structure can be optimized to speed up the kernel. Also, in this embodiment the kernel only needs to know two states for each thread (running a thread or waiting for an event for delivery to a thread), thereby improving kernel efficiency. In contrast, conventional kernels typically require the kernel to distinguish between various states, such as semaphore waits, events, message streams, or I / O operations, which increases complexity in the kernel and increases memory requirements. do.

본 발명의 다른 실시예에 있어서는, 스레드가 수신하고자 하는 이벤트의 유형(이벤트의 종류)을 나타내도록 커널에 등록하기 위한 수단을 각 스레드에 제공한다. 각 스레드는 또한 이벤트가 시스템에 배달된 때(단 그 이벤트가 스레드에 전달되기 전) 그 배달된 이벤트가 문맥에 대해 적당한 지의 여부를 판단하는 필터 프로시저("filter" procedure)를 특정한다. 이 필터는 지정 스레드를 호출하는 대신에 인터럽트 시점에서 실행되는 인터럽트 서비스 루틴(interrupt service routine)으로 해도 좋은데, 이 경우 문맥 전환이 필요할 것이다.In another embodiment of the present invention, each thread is provided with means for registering with the kernel to indicate the type of event (type of event) the thread wishes to receive. Each thread also specifies a "filter" procedure that determines whether the delivered event is appropriate for the context when the event is delivered to the system (but before the event is delivered to the thread). This filter can be an interrupt service routine that is executed at the time of interruption instead of calling the specified thread, in which case a context switch will be required.

본 명세서에서 사용된 “가정용 통신 터미널(HCT)”이란 용어는 전화 네트워크, 케이블 TV나 다른 오디오비주얼 프로그래밍 네트워크, 위성 네트워크 또는 이들의 조합에 사용되는 터미널을 말한다.As used herein, the term “home communication terminal (HCT)” refers to a terminal used in a telephone network, cable television or other audiovisual programming network, satellite network, or a combination thereof.

본 발명의 기타 다른 목적 및 장점은 다음의 상세 설명, 도면 및 청구의 범위로부터 명백하게 될 것이다.Other objects and advantages of the invention will be apparent from the following detailed description, drawings, and claims.

도 1은 본 발명의 원리를 이용하는 운영 시스템이 설치될 수 있는 가정용 통신 터미널(HCT)의 한가지 가능한 구성을 도시한 도면이다.1 shows one possible configuration of a home communication terminal (HCT) in which an operating system utilizing the principles of the present invention may be installed.

도 2는 본 발명에 따라 구성한 커널 이벤트 조정기가 도입 이벤트를 어떻게 효과적으로 조정하고 필터링하는 지를 개략적으로 도시한 도면이다.FIG. 2 is a diagram schematically illustrating how the kernel event coordinator configured in accordance with the present invention effectively adjusts and filters the introduction event.

도 3은 HCT에서 이벤트를 효과적으로 조정하기 위해서 커널 이벤트 조정기가 실행할 수도 있는 단계들을 도시한 도면이다.FIG. 3 illustrates the steps that a kernel event coordinator may execute to effectively coordinate events in an HCT.

도 4는 여러 가지 유형의 이벤트에 대한 등록된 관심을 가진 여러 다른 스레드의 일 예를 도시한 도면이다.4 illustrates an example of several different threads with registered interest in various types of events.

도 5는 본 발명의 원리를 이용하는 시스템에서 이벤트 오브젝트에 대한 한가지 가능한 포맷을 도시한 도면이다.5 illustrates one possible format for an event object in a system utilizing the principles of the present invention.

도 6은 NextEvent 기능을 커널에 의해서 구현하는 큐를 사용함으로써 두개의 스레드가 세마포를 구현하는 방법을 도시한 도면이다.6 illustrates how two threads implement semaphores by using a queue that implements NextEvent functionality by the kernel.

도 1은 본 발명의 각종 원리를 실시할 수 있는 가정용 통신 터미널(HCT)의 블럭도이다. HCT는 CPU 카드(100), 그래픽 카드(101), 디코더 카드(102), 디스플레이 패널 및 키이패드(103), 메인 프로세싱 보드(main processing board)(104), 프론트 엔드(front end)(105), 튜닝 섹션(tuning section)(106) 및 오디오 섹션(audio section)(107)을 포함할 수도 있다. 본 발명의 원리는 적절한 CPU(100a) 예를 들어 PowerPC 또는 Motorola 68000과 더불어 적절한 EPROM(100c) 및 RAM(100b)을 사용해서 실시할 수도 있을 것이다. 또한, CPU(100a) 상에서 실행되는 응용 프로그램은 당해 기술분야에서 잘 알려진 각종 주변장치 예를 들어 마우스, 게임 콘트롤러, 키이패드, 네트워크 인터페이스(mouse, game controllers, keypads, network interfaces) 등과 상호 작동할 수 있을 것이다.1 is a block diagram of a home communication terminal (HCT) in which various principles of the invention may be practiced. HCT includes CPU card 100, graphics card 101, decoder card 102, display panel and keypad 103, main processing board 104, front end 105 It may also include a tuning section 106 and an audio section 107. The principles of the present invention may be implemented using a suitable CPU 100a, such as a PowerPC or Motorola 68000, along with a suitable EPROM 100c and RAM 100b. In addition, an application program running on the CPU 100a may interact with various peripheral devices that are well known in the art, such as a mouse, a game controller, a keypad, a network interface, and the like. There will be.

도 2는 본 발명의 각종 원리를 이용하는 커널 이벤트 조정기(kernel event handler)가 도입 이벤트(incoming events)를 어떻게 효과적으로 조정하고 HCT에서 실행되는 소정 스레드에 대해 이벤트를 어떻게 사전 한정하는 지를 개략적으로 도시한다. 일반적으로 말해서, 시스템의 여러 다른 스레드는 어떤 유형의 이벤트에 대해서만 관심을 두고 있으며, 다른 유형의 이벤트는 무시하고자 할 것이다. 이벤트의 예로서는 HCT에 부착된 키이패드의 키이누름(keypress), HCT에 부착된 마우스로부터 수신되는 마우스 이동 표시(mouse movement indication), HCT에 연결된 게임 콘트롤러 상의 버튼누름(button press), HCT에 결합된 헤드엔드(headend) 또는 영화의 시작을 나타내는 신호가 있다. (멀티-스레디드 커널에서 동시에 실행할 수도 있는) 여러 다른 스레드의 예로서는, 제 1 플레이어에 의해 작동되는 비디오 게임의 카피(copy), 제 2 플레이어에 의해 작동되는 비디오 게임의 카피, 온-스크린 프로그래밍 가이드(on-screen programming guide), 영화 플레이어(movie player), 채널 튜닝 표시기(channel tuning indicator) 또는 고객 빌링 어플리케이션용의 사용자 인터페이스(user interface for a customer billing application)가 있다. 일반적으로, 하나의 어플리케이션은 단일의 스레드에 대응할 수도 있고, 또는 단일의 어플리케이션은 성능의 최적화를 위해 동시에 실행될 수도 있는 다수의 스레드로 분할될 수도 있다. 당업자라면, 각종 어플리케이션이 시스템에서 단일 또는 다수의 스레드로 어떻게 구성될 수도 있는 지를 알 것이다.2 schematically illustrates how a kernel event handler utilizing various principles of the present invention effectively coordinates incoming events and predefines events for a given thread running in the HCT. Generally speaking, different threads in the system only care about some type of event, and you want to ignore other types of events. Examples of events include keypresses on the keypad attached to the HCT, mouse movement indications received from the mouse attached to the HCT, button presses on the game controller connected to the HCT, coupled to the HCT. There is a signal indicating the beginning of the headend or movie. Examples of different threads (which may run concurrently in a multi-threaded kernel) include a copy of a video game run by a first player, a copy of a video game run by a second player, an on-screen programming guide. (on-screen programming guide), movie player, channel tuning indicator, or user interface for a customer billing application. In general, one application may correspond to a single thread, or a single application may be divided into multiple threads, which may be executed simultaneously for optimization of performance. Those skilled in the art will appreciate how various applications may be configured with a single or multiple threads in the system.

고객 빌링 어플리케이션은 HCT 키이패드로부터 또한 고객이 특정 코드를 처음 기입한 경우에만 발생되는 이벤트에 대해서만 관심이 있을 수도 있다. 두 개의 비디오 게임 스레드는 HCT에 결합된 두 개의 게임 콘트롤러중의 어떤 것으로부터도 발생하는 모든 키이누름에 관심을 가질 수도 있다(따라서, 동일한 이벤트의 카피들이 그들 두 스레드에 배달되어야 한다.). 온-스크린 프로그래밍 가이드 스레드는 마우스 커서가 스크린 상의 어떤 사전설정된 영역 내에 위치되는 때에 발생하는 키이누름 이벤트에만 관심을 가질 수도 있으며, (마우스 커서가 스크린 상의 어떤 사전설정된 영역 내에 위치되지 않는 때의 키이누름 이벤트를 포함하는) 모든 다른 이벤트를 무시하고자 할 수도 있다. 물론 많은 다른 예도 가능하다. 따라서, 각 스레드는 여러 다른 유형의 이벤트에 대한 관심을 등록하고자 할 수도 있으며, 나중에 등록된 관심을 변경하고자 할 수도 있다.The customer billing application may only be interested in events that occur only from the HCT keypad and only when the customer first enters a particular code. Two video game threads may be interested in all keypresses occurring from any of the two game controllers coupled to the HCT (thus, copies of the same event must be delivered to those two threads). The on-screen programming guide thread may only be interested in keypress events that occur when the mouse cursor is located within any preset area on the screen, and (the keypress when the mouse cursor is not located within any preset area on the screen). You may want to ignore all other events (including events). Of course many other examples are possible. Thus, each thread may wish to register interest in several different types of events, and may later want to change the registered interest.

도 2는 상기한 목적을 달성할 수 있는 커널 이벤트 조정기(204)를 포함하는 예시적인 구성을 도시한다. 도 2에 도시한 바와 같이, 두 개의 스레드(A 및 B)는 기능 pk_RegisterInterest(부록 1 참조), 커널-제공 프로그래밍 인터페이스(kernel-provided programming interface)를 사용하여 두 가지의 다른 이벤트에 대한 관심을 커널에 각각 등록할 수 있다. 대응하는 기능 pk_RemoveInterest는 스레드가 스레드에서 관심을 제거할 수 있게 한다(부록 1 참조). pk_RegisterInterest의 호출에 응답하여, 커널은 “이벤트 관심” 오브젝트("event interest" objects)(200a, 200b 및 200c)의 연결 리스트를 포함할 수도 있는 이벤트 관심 리스트(200)를 구성한다. 예를 들어, 스레드(A)는 이벤트 관심(200b)에 대응하는 이벤트에 대한 관심을 등록할 수도 있으며, 스레드(B)는 이벤트 관심(200c)에 대응하는 이벤트에 대한 관심을 등록할 수도 있는데, 이들의 각각은 pk_RegisterInterest에 대한 대응 기능 호출내의 파라미터에 의해서 특정된다. 도 2에 도시된 예의 경우, 스레드(A)는 게임 콘트롤러로부터의 키이누름 이벤트에 대해서만 관심을 갖는 비디오 게임 어플리케이션을 포함하고 한편 스레드(B)는 마우스로부터의 버튼누름에 대해서만 관심을 갖는 빌링 어플리케이션을 포함하는 것으로 가정한다.2 illustrates an example configuration that includes a kernel event conditioner 204 that can accomplish the above purpose. As shown in Figure 2, the two threads (A and B) use the function pk_RegisterInterest (see Appendix 1), kernel-provided programming interface to kernel attention to two different events. You can register each at. The corresponding function pk_RemoveInterest allows a thread to remove interest from a thread (see Appendix 1). In response to a call to pk_RegisterInterest, the kernel constructs an event interest list 200, which may include a linked list of "event interest" objects 200a, 200b, and 200c. For example, thread A may register an interest in an event corresponding to event interest 200b, and thread B may register an interest in an event corresponding to event interest 200c. Each of these is specified by a parameter in the corresponding function call to pk_RegisterInterest. In the example shown in FIG. 2, thread A includes a video game application that only cares about keypress events from the game controller while thread B has a billing application that only cares about button presses from the mouse. It is assumed to be included.

각종 실시예에서, 커널은 pk_RegisterInterest 및 pk_RemoveInterest에 대한 호출에 응답해서 이벤트 리스트(200)를 조작한다. 커널 이벤트 조정기(204)가 이벤트를 수신하거나 발생하는 경우, 그 조정기는 이벤트 관심 리스트(200)를 횡단하여 (traverses) 시스템의 각종 스레드가 호출되어야만 할 조건을 결정한다. 일반적으로, (이벤트를 설명하는) 이벤트 디스크립터(event descriptor)를 각 이벤트 관심 오브젝트 내에 포함된 파라미터와 비교하는 것에 의해, 커널 이벤트 조정기(204)는 이벤트에 대한 표명된 관심을 가진 스레드의 호출 여부 및 호출 방법을 효과적으로 판단할 수 있다.In various embodiments, the kernel manipulates the event list 200 in response to calls to pk_RegisterInterest and pk_RemoveInterest. When the kernel event coordinator 204 receives or occurs an event, the coordinator traverses the event watchlist 200 to determine the conditions under which the various threads of the system should be invoked. In general, by comparing an event descriptor (which describes an event) with a parameter contained within each event interest object, the kernel event coordinator 204 can determine whether or not a thread with declared interest in the event has been invoked and Effectively determine how to call.

각각의 이벤트 관심 오브젝트(200a, 200b, and 200c)는 pk_RegisterInterest에 대해서 설명한 파라미터에 따라 코드 필드, 마스크 필드, 필터 프로시저 필드 및 큐 필드(code field, a mask field, a filter procedure field, and a queue field)를 포함할 수도 있다. 예를 들어, 스레드(A)가 어떤 게임 콘트롤러 이벤트에 대한 관심을 등록하는 경우, 그것은 코드 2, 마스크 2, 필터 2 및 큐 2를 기능 pk_RegisterInterest내의 파라미터로서 특정한다.Each event interest object 200a, 200b, and 200c has a code field, a mask field, a filter procedure field, and a queue according to the parameters described for pk_RegisterInterest. field). For example, if thread A registers interest for a game controller event, it specifies code 2, mask 2, filter 2 and cue 2 as parameters in function pk_RegisterInterest.

본 발명의 각종 원리를 수행하는데 사용할 수도 있는 다수의 기능에 대한 설명을 포함하는 부록 1을 간단히 참조하겠다. 부록 1내의 각 기능에 대해서, 사용 파라미터 유형 및 예들의 리스트를 포함하는 문장(syntax)이 제공된다. 기능 pk_RegisterInterest를 참조하면, 예를 들어 스레드(A)는 이 기능을 호출하고 코드, 마스크, 필터 및 큐에 대한 파라미터 값(필터 및 큐 파라미터는 선택사양적임)을 공급하여 커널이 이벤트를 사전한정하고 그 이벤트를 스레드(A)로 향하게 한다.Reference is briefly made to Appendix 1, which contains a description of a number of functions that may be used to carry out the various principles of the invention. For each function in Appendix 1, a syntax is provided that includes a list of usage parameter types and examples. Referring to the function pk_RegisterInterest, for example, the thread (A) calls this function and supplies the parameter values for the code, masks, filters, and queues (filter and queue parameters are optional), so that the kernel can predefine events. Direct the event to thread A.

pk_RegisterInterest 기능(부록 1 참조)은 이벤트 관심을 생성하여 커널에 등록한다. 그것의 코드 파라미터는 원하는 이벤트의 설명을 특정하고, 그것의 마스크 파라미터는 관심의 이벤트를 더욱 명확히 하는 이벤트 마스크를 특정하고, 그것의 필터 파라미터는 이벤트의 발생 시에 커널이 호출하기 위한 인터럽트 서비스 루틴(ISR)을 특정하며, 그것의 큐 파라미터는 이벤트가 보내질 큐에 대한 포인터(pointer)를 특정한다.The pk_RegisterInterest function (see Appendix 1) generates event interest and registers it with the kernel. Its code parameter specifies the description of the desired event, its mask parameter specifies an event mask that further clarifies the event of interest, and its filter parameter specifies an interrupt service routine (called by the kernel when the event occurs). ISR), whose cue parameter specifies a pointer to the queue to which the event is sent.

각 이벤트 관심 오브젝트 예를 들어 도 2의 요소(200b)는 도입 이벤트에 대한 원하는 이벤트 디스크립터를 특정하는 마스크 및 코드를 홀드(hold)한다. 마스크는 이벤트 디스크립터의 어떤 필드들이 특정된 관심에 대해 적합한지를 특정하며, 코드는 배달된 이벤트가 이벤트 관심을 트리거(trigger)하기 위해서 그들 필드가 가져야만 하는 값들을 특정한다.Each event interest object, for example element 200b of FIG. 2, holds a mask and code that specifies a desired event descriptor for an introduction event. The mask specifies which fields of the event descriptor are appropriate for the specified interest, and the code specifies the values that those fields must have in order for the delivered event to trigger the event interest.

마스크 필드의 비트들은 이벤트 디스크립터의 어떤 필드들이 특정 관심에 적합한지를 나타내기 위해 사용될 수 있다. 한가지의 가능한 예는 32개 비트를 마스크 필드에 할당하고자 하는 것이다. 32개 비트들 중에서, 8개 비트는 디바이스 유형(즉, 이벤트를 발생한 디바이스 유형)을 나타내기 위해 할당될 수 있으며, 다른 8개 비트는 디바이스 사례(즉, 이벤트를 발생한 디바이스 유형의 사례)를 나타내기 위해 할당될 수 있으며, 또다른 8개 비트는 이벤트 유형(즉, 디바이스가 발생한 이벤트 유형 예를 들어 키이누름)을 나타내기 위해 할당될 수 있으며, 또다른 8개 비트는 이벤트 데이터(즉, 이벤트 정보를 포함할 수 있는 소량의 데이터 예를 들어 눌려진 특정 키이)를 나타내기 위해 할당될 수 있다. 이러한 할당은 단지 예에 불과하며 한정하고자 하는 것은 아니다.The bits of the mask field can be used to indicate which fields of the event descriptor are appropriate for a particular interest. One possible example is to assign 32 bits to the mask field. Of the 32 bits, eight bits can be allocated to indicate the device type (i.e. the type of device that generated the event), and the other eight bits represent the device case (i.e. the case of the device type that caused the event). Another eight bits may be allocated to indicate the type of event (i.e., the type of event where the device occurred, e.g. keypress), and another eight bits may be assigned to the event data (i.e. A small amount of data that may contain information, for example a particular key pressed. This assignment is merely an example and is not intended to be limiting.

예를 들어 도 2에서 이벤트 디스크립터(201)로 나타낸 바와 같이, 각 이벤트 디스크립터 내에는 대응 필드들이 포함될 수도 있다. 따라서, 각 이벤트 디스크립터는 이벤트에 대응하는 디바이스 유형, 디바이스 사례, 이벤트 유형 및 이벤트 데이터를 포함할 수 있다.For example, as shown by the event descriptor 201 in FIG. 2, corresponding fields may be included in each event descriptor. Thus, each event descriptor may include a device type, device case, event type, and event data corresponding to the event.

어떤 디바이스 유형으로부터의 이벤트에 대한 관심을 등록하기 위해, 스레드는 디바이스 유형 파라미터를 모두 1로 세팅할 것이다. 따라서, 다음의 (hex) 마스크가 정의될 수도 있다.To register an interest in an event from a device type, the thread will set the device type parameter to all ones. Thus, the following (hex) mask may be defined.

kDt_Any OOFFFFFF 어떤 디바이스 유형(비트 24 내지 31)kDt_Any OOFFFFFF Any device type (bits 24 through 31)

kDi_Any FFOOFFFF 어떤 디바이스 사례(비트 16 내지 23)kDi_Any FFOOFFFF Some device examples (bits 16 to 23)

kEt_Any FFFFOOFF 어떤 이벤트 유형(비트 8 내지 15)kEt_Any FFFFOOFF Any event type (bits 8 through 15)

kEd_Any FFFFFFOO 어떤 데이터 값(비트 0 내지 7)kEd_Any FFFFFFOO Any data value (bits 0 through 7)

예를 들어, 모든 게임 콘트롤러 이벤트를 등록하기 위해, 어플리케이션은For example, to register all game controller events, the application

pk_Registerinterest (kDt_Controller,pk_Registerinterest (kDt_Controller,

kDi_Any & kEt_Any & kEd_Any, NULL, my_Q)kDi_Any & kEt_Any & kEd_Any, NULL, my_Q)

를 호출할 것이다(여기서, kDt_Controller는 게임 콘트롤러에 대응하는 코드이고, 이벤트 마스크는 FF000000으로 증가한다(어떠한 필터 프로시저도 특정되지 않는다.).(Where kDt_Controller is the code corresponding to the game controller, and the event mask is incremented to FF000000 (no filter procedure is specified).

알 수 있는 바와 같이, 마스크 FF000000은 모든 디바이스 유형들이 세트되게 하여 디바이스 유형이 코드내의 특정된 것(즉, 콘트롤러 유형)과 비교되게 하나 디바이스 사례(다음의 8개 비트), 이벤트 유형(후속하는 8개 비트) 또는 이벤트 데이터(최종 8개 비트)는 0으로 남겨 둔다(“신경을 쓰지 않는다(not caring about)”). 이벤트가 상기한 필드들의 서브세트에 의해 또는 특정 유형의 이벤트를 한정하는 완전히 다른 필드들에 의해 생성될 수도 있음은 이해될 것이다.As can be seen, the mask FF000000 allows all device types to be set so that the device type is compared with the specified one in the code (ie the controller type) but the device case (the next 8 bits), the event type (following 8) Bits) or event data (the last 8 bits) is left at zero (“not caring about”). It will be appreciated that the event may be generated by a subset of the fields described above or by completely different fields that define a particular type of event.

도 2의 예를 다시 참조하여, 스레드(A)가 커서가 사전설정된 스크린 영역 내에 있을 때에 발생하는 모든 게임 콘트롤러 키이누름 이벤트에 대한 관심을 등록하고자 하고 다른 모든 유형의 이벤트는 무시하고자 한다고 가정한다. 스레드(A)는 “디바이스 유형”을 한정사(qualifier)로서 특정하고 디바이스 사례를 오픈(open) 상태로 남겨 두고 “이벤트 유형”을 한정사로서 특정하며 “이벤트 데이터”를 오픈 상태로 남겨 두는 마스크 2를 특정함으로써 이벤트 관심(200b)을 생성한다. 또한, 스레드(A)는 “게임 콘트롤러”를 원하는 이벤트 유형으로서 식별하고 “키이누름”을 원하는 이벤트 유형으로서 식별하는 코드 2를 특정한다. 마지막으로, 스레드(A)는 이벤트를 더욱 한정하기 위해 실행될 필터 프로시저(203)와 이벤트가 배치될 큐(큐 2)를 특정한다. 도 2에 도시된 예의 경우, 필터 프로시저(203)는 이벤트를 지나가기 전에 커서가 한정된 영역 내에 확실하게 위치하도록 커서 위치를 검사한다. 필터 프로시저(203)는 커널 모드에서 실행되고 따라서 문맥 전환이 피해지게 되는 것으로 가정한다. 달리 말해서, 스레드(A)는 이벤트가 스레드(A)의 한정 모두를 충족시키지 못하면 커널에 의해 스케쥴링되지 않을 것이다.Referring back to the example of FIG. 2, assume that thread A wants to register interest in all game controller keypress events that occur when the cursor is within a preset screen area and ignore all other types of events. Thread (A) specifies Mask 2, which specifies “device type” as a qualifier, leaves the device case open, specifies “event type” as a qualifier, and leaves “event data” open. By specifying the event interest 200b is generated. Thread A also specifies code 2 that identifies "game controller" as the desired event type and "keypress" as the desired event type. Finally, thread A specifies the filter procedure 203 to be executed to further define the event and the queue in which the event is to be placed (queue 2). In the example shown in FIG. 2, the filter procedure 203 checks the cursor position to ensure that the cursor is positioned within the confined area before passing the event. It is assumed that filter procedure 203 is run in kernel mode and thus context switching is avoided. In other words, thread A will not be scheduled by the kernel if an event does not meet all of thread A's limitations.

게임 콘트롤러(205)로부터 이벤트가 발생되면, 이벤트의 특성에 대응하는 이벤트 디스크립터(201)가 생성된다. 하드웨어 변경을 검출하는 디바이스 드라이버(device driver)는 pk_PostEvent(부록 1 참조)를 사용하여 그러한 이벤트를 배달할 수 있다. 도 2의 예에 있어서는, 게임 콘트롤러(205) 상의 “A” 버튼이 눌려져 있는 상태이며, 따라서 이벤트 디스크립터(201)는 “A”버튼에 대응하여 디바이스 유형을 게임 콘트롤러(“1”)로서, 디바이스 사례를“1”로서, 이벤트 유형을 “키이”로서, 이벤트 데이터를“A”로서 나타낸다. 커널 이벤트 조정기(204)는 (pk_PostEvent로부터의) 도입 이벤트를 수신하고 이벤트 관심 리스트(200)를 횡단하여 도입 이벤트를 관심의 이벤트에 일치시킨다.When an event is generated from the game controller 205, an event descriptor 201 corresponding to the characteristic of the event is generated. A device driver that detects a hardware change can deliver such an event using pk_PostEvent (see Appendix 1). In the example of FIG. 2, the "A" button on the game controller 205 is pressed, so that the event descriptor 201 sets the device type as the game controller ("1") in response to the "A" button. The example is shown as "1", the event type as "key", and the event data as "A". The kernel event coordinator 204 receives the introduction event (from pk_PostEvent) and traverses the event interest list 200 to match the introduction event to the event of interest.

바람직한 실시예에서, 이벤트 일치 단계는 각 이벤트 관심 오브젝트의 마스크와 도입 이벤트 디스크립터를 곱한 다음에 그 결과를 이벤트 관심 오브젝트의 코드와 비교함으로써 아주 효과적으로 수행될 수도 있다. 일치하면, 이벤트가 사전 한정된다. 도 2에서, 예를 들어, 커널 이벤트 조정기(204)는 이벤트 디스크립터(201)를 마스크 1과 곱하고 그 결과를 코드 1과 비교함으로써 먼저 이벤트 관심 오브젝트(200a)를 시험하고 일치하지 않음을 신속히 판단한다. 이같은 “승산(AND)” 및 그 다음의 “비교(COMPARE)” 동작은 CPU 상에서 아주 효과적으로 행해질 수 있어(전형적으로, 단지 두 개의 어셈블리 언어 명령만이 필요함), 본 발명의 원리를 사용함으로써 얻어지는 성능 향상이 부가된다.In a preferred embodiment, the event matching step may be performed very effectively by multiplying the mask of each event interest object and the introduction event descriptor and then comparing the result with the code of the event interest object. If there is a match, the event is predefined. In FIG. 2, for example, the kernel event coordinator 204 first tests the event-interest object 200a and quickly determines that it does not match by multiplying the event descriptor 201 by mask 1 and comparing the result with code 1. . This "AND" and then "COMPARE" operations can be done very effectively on the CPU (typically only two assembly language instructions are needed), resulting in performance obtained by using the principles of the present invention. An improvement is added.

이벤트 디스크립터(201)가 이벤트 관심 오브젝트(200a)와 일치하지 않는다고 판단한 후, 커널 이벤트 조정기(204)는 그 다음 이벤트 관심 오브젝트(200b)를 시험하고 마스크 2를 이벤트 디스크립터(201)와 곱한 다음, 그 결과를 코드 2와 비교한다. 도 2의 예에서는, 그 결과가 성공적으로 일치한다고 가정한다. 그러나, 스레드(A)가 필터 프로시저(203)를 특정하기 때문에, 커널 이벤트 조정기(204)는 이벤트를 스레드(A)에 통과시키지 않고 그 대신에 필터 프로시저(203)를 실행하며, 이 프로시저는 커서 위치를 검사하여 그 커서가 유효 영역에 있는지를 안다. 커서가 유효 영역에 있는 경우, 커널 이벤트 조정기(204)는 그 이벤트를 큐 2에 전달하며, 스레드(A)는 pk_NextEvent(부록 1 참조)를 사용하여 큐 2로부터 이벤트를 추출할 수 있다.After determining that event descriptor 201 does not match event interest object 200a, kernel event coordinator 204 then examines event interest object 200b and multiplies mask 2 with event descriptor 201, and then Compare the result with code 2. In the example of FIG. 2, the results are assumed to match successfully. However, because thread A specifies the filter procedure 203, the kernel event coordinator 204 does not pass the event to thread A, but instead executes the filter procedure 203, and this program does not. The procedure checks the cursor position to see if it is in the valid area. If the cursor is in the valid area, the kernel event coordinator 204 forwards the event to queue 2, and thread A can extract the event from queue 2 using pk_NextEvent (see Appendix 1).

이벤트가 필터 프로시저(203)를 성공적으로 통과되지 않으면, 스레드(A)가 스케쥴링되지 않게 되어, 문맥 전환이 회피되며 커널의 효율이 증가되는 것에 주목해야 한다. 달리 말해서, 바람직한 실시예의 경우, 필터 루틴(203)은 커널의 실행 중에 실행되며 스레드(A)의 스케쥴링을 필요로 하지 않는다. 이벤트의 20%만이 실제로 스레드에 대해 관심의 것이면, 문맥 전환을 필요로 하는 스레드 코드에서 보다 커널 코드에서의 “관심” 판정이 훨씬 더 빠르다.It should be noted that if the event does not pass the filter procedure 203 successfully, thread A is not scheduled, so that context switching is avoided and kernel efficiency is increased. In other words, in the preferred embodiment, the filter routine 203 is executed during execution of the kernel and does not require scheduling of thread A. If only 20% of the events are actually of interest to the thread, then the "interest" decision in the kernel code is much faster than in the thread code that requires context switching.

도 2의 예를 계속 참조하여, 스레드(B)가 마우스(206)로부터의 어떤 마우스 이동에 대해 등록된 관심을 갖는다고 가정한다. 스레드(B)는 pk_Registerinterest에 의해서 이벤트 관심 오브젝트(200c)를 셋업하여, 디바이스 유형을 한정사로서 특정하고 다른 마스크 필드는 오픈 상태로 남겨 둘 것이다. 코드 3의 디바이스 유형에 대해서, 스레드(B)는 특정된 “마우스”를 가질 것이다. 사용자가 마우스 버튼을 누르면, 이벤트 디스크립터(202)가 발생될 것인데, 이것은 디바이스 유형을 마우스(“2”)로서, 디바이스 사례를“1”로서, 이벤트 유형을 “키이”로서, 이벤트 데이터를“마우스 누름”으로서 나타낸다. 커널 이벤트 조정기(204)는 이벤트 관심 리스트(200)를 횡단하여, 바람직하게는 각각의 마스크를 이벤트 디스크립터와 곱하고 그 결과를 코드와 비교한다. 이 조정기가 이벤트 관심 오브젝트(200c)에 이르면, 그 조정기는 일치함을 발견할 것이며 즉시 그 이벤트를 큐 3에 배치하는데, 이 큐는 스레드(B)에 의해 원하는 큐로서 특정된다(어떠한 필터 프로시저도 특정되지 않는다.).With continued reference to the example of FIG. 2, assume that thread B has registered interest in certain mouse movements from mouse 206. Thread B will set up event interest object 200c by pk_Registerinterest to specify the device type as a qualifier and leave the other mask fields open. For the device type of code 3, thread B will have a specified “mouse”. When the user presses the mouse button, an event descriptor 202 will be generated, which device type is mouse ("2"), device case is "1", event type is "key" and event data is "mouse". Press ”. The kernel event coordinator 204 traverses the event watch list 200, preferably multiplying each mask with an event descriptor and comparing the result with the code. When this coordinator reaches the event of interest object 200c, the coordinator will find a match and immediately place the event on queue 3, which is specified as the desired queue by thread B (any filter procedure). I'm not specific either).

도 3은 커널 이벤트 조정기(204)에 의해서 실행되어 시스템의 도입 이벤트를 조정할 수도 있는 단계들을 도시한다. 이벤트 관심 리스트는 시스템의 스레드에 의해 만들어진 pk_RegisterInterest 호출을 사용함으로써 이미 생성된 것으로 가정한다. 단계(301)에서, 이벤트 관심 리스트로부터 다음 이벤트 오브젝트를 검색한다. 단계(302)에서, 이벤트 관심 오브젝트로부터의 마스크를 이벤트에 대응하는 이벤트 디스크립터와 곱한다. 단계(303)에서, 그 결과를 이벤트 관심 오브젝트로부터의 코드와 비교한다. 단계(304)에서, 일치하지 않으면, 단계(301)에서 프로세싱을 다음 이벤트 관심 오브젝트에 대해 재개한다.3 illustrates steps that may be executed by the kernel event coordinator 204 to coordinate the introduction event of the system. The event watchlist is assumed to have already been created by using the pk_RegisterInterest call made by the system's thread. In step 301, the next event object is retrieved from the event watchlist. In step 302, the mask from the event interest object is multiplied with the event descriptor corresponding to the event. In step 303, the result is compared with the code from the event interest object. In step 304, if there is a mismatch, processing resumes for the next event interest object in step 301.

단계(304)에서, 일치하면, 단계(305)에서 필터가 이벤트 관심 오브젝트에 대해 특정되었는 지의 여부를 판단한다. 만일 필터가 이벤트 관심 오브젝트에 대해 특정되었으면, 단계(306)에서 특정된 필터가 바람직하게는 문맥 전환 없이 커널에 의해서 직접적으로 호출된다. 단계(307)에서, 이벤트가 필터를 통과하면 프로세싱을 단계(308)로 진행하고, 그렇지 않으면 단계(301)에서 프로세싱을 다음 이벤트 관심 오브젝트에 대해 재개한다. 단계(308)에서, 큐가 이벤트 관심에 대해 특정되었으면 단계(309)에서 이벤트를 특정된 큐에 배치하며, 그렇지 않으면 이벤트 관심 리스트에 이를 때까지 단계(301)에서 프로세싱을 재개한다.In step 304, if there is a match, it is determined in step 305 whether a filter has been specified for the event interest object. If the filter has been specified for the event interest object, then the filter specified in step 306 is preferably invoked directly by the kernel without context switching. In step 307, processing proceeds to step 308 if the event passes the filter, otherwise processing resumes for the next event interest object in step 301. In step 308, if the queue has been specified for event interest, the event is placed in the specified queue in step 309, otherwise processing resumes in step 301 until the event interest list is reached.

어떠한 큐도 특정되지 않았을 경우에는 이벤트가 무시될 수 있음에 주목해야 한다. 이러한 상황은 예를 들어 프로세싱이 필터 자체에서 행해지는 경우에 바람직할 수도 있다. 예를 들어, 단지 메모리 영역 또는 다른 유형의 단기간 동작인 경우에는, 이를 필터 리스트(커널)에서 행하는 것이 보다 효과적일 수도 있으며 어떠한 큐도 제공할 필요가 없다(즉 기상(wake up)시킬 어떠한 스레드도 없다.).Note that the event can be ignored if no queue is specified. This situation may be desirable, for example, if the processing is done in the filter itself. For example, in the case of just a memory area or other type of short-term operation, it may be more efficient to do this in a filter list (kernel) and you do not need to provide any queues (i.e. any thread to wake up). none.).

또한, 필터를 재사용할 수 있다. 예를 들어, 하나의 필터는 커서가 스크린 상의 특정 위치 내에 있는 지의 여부를 판단하는 기능을 가질 수도 있고, 여러 다른 스레드가 그 필터를 특정하고 사용할 수도 있다. 예를 들어, 텔레비젼 스크린 상에 개별적인 윈도우를 제각기 가진 3개의 다른 어플리케이션이 HCT에서 실행되고 사용자가 스크린 상에서 마우스를 이동시키면, 커서가 특정된 스레드에 대한 윈도우 경계를 넘어서는 지의 여부를 판단하는 단일의 필터를 생각할 수 있다.In addition, the filter can be reused. For example, one filter may have the ability to determine whether the cursor is within a particular location on the screen, and different threads may specify and use that filter. For example, if three different applications, each with a separate window on the television screen, are run in the HCT and the user moves the mouse on the screen, a single filter that determines whether the cursor crosses the window boundary for the specified thread. You can think of

또한, 필터 및 큐가 특정된 경우에는, 필터가 이벤트 자체를 수정할 수 있다. 예를 들어, 필터는 이벤트를 큐 상에 놓기 전에 이벤트의 시간을 수정할 수도 있다. 이것은 예를 들어 이벤트의 타임 스탬프(time stamp)를 현재 시간으로 변경하는(예를 들어, 현재 시간으로 변환하는) “리플레이(replay)” 필터에 의해서 사용될 수도 있다. 다른 예로서는 스레드의 기상 전에 이벤트의 기호(signature)를 검사하는 것이 있다.Also, if a filter and a queue are specified, the filter can modify the event itself. For example, the filter may modify the time of the event before placing the event on the queue. This may be used, for example, by a “replay” filter that changes the time stamp of the event to the current time (eg, converts to the current time). Another example is to check the signature of the event before the thread wakes up.

도 4는 본 발명의 원리를 적용하는 다른 예를 도시한다. HCT 상에서 실핼할 비디오 게임이 서로 경쟁하는 두 개의 문자를 제공하고 두 사용자는 제각기 개별적인 게임 콘트롤러(401 및 402)와 상호 작용한다고 가정한다. 비디오 게임은 전체적인 스코어링(scoring) 및 게임 동작을 제어하는 메인 비디오 게임 스레드(403) 및 두 플레이어 스레드(404 및 405)를 포함한다. 도 4의 예에서, 예를 들어 플레이어 1 스레드(404)는 비디오 스크린 상의 제 1 문자의 행동을 제어하며, 플레이어 2 스레드(405)는 비디오 스크린 상의 제 2 문자의 행동을 제어한다. 따라서, 스레드(404)는 플레이어 1이 취한 행동에 근거해서 제 1 비디오 문자를 조작하고 스레드(405)는 플레이어 2가 취한 행동에 근거해서 제 2 비디오 문자를 조작한다. 그 결과, 플레이어 1 스레드(404)는 (적당한 코드, 마스크, 필터 및 큐 파라미터를 특정하는 것에 의해) 게임 콘트롤러 #1로부터의 모든 이벤트에 대한 관심을 등록하고 플레이어 2 스레드(405)는 게임 콘트롤러 #2로부터의 모든 이벤트에 대한 관심을 등록한다.4 shows another example of applying the principles of the invention. It is assumed that the video game to be executed on the HCT provides two characters competing with each other and the two users interact with separate game controllers 401 and 402 respectively. The video game includes a main video game thread 403 and two player threads 404 and 405 that control overall scoring and game behavior. In the example of FIG. 4, for example, Player 1 thread 404 controls the behavior of the first character on the video screen, and Player 2 thread 405 controls the behavior of the second character on the video screen. Thus, thread 404 manipulates the first video character based on the action taken by player 1 and thread 405 manipulates the second video character based on the action taken by player 2. As a result, Player 1 thread 404 registers interest in all events from Game Controller # 1 (by specifying the appropriate code, mask, filter, and cue parameters) and Player 2 Thread 405 registers Game Controller #. Register interest in all events from 2.

도 4에 도시한 구성에서, 플레이어 2가 게임 콘트롤러 #2 상의 “중지” 키이를 눌렀음을 플레이어 1 스레드(404)가 알기를 원하고 플레이어 1이 게임 콘트롤러 #1 상의 “중지” 키이를 눌렀음을 플레이어 2 스레드(405)가 알기를 원한다고 가정한다(달리 말해서, 상대편 콘트롤러를 작동하는 플레이어를 포함하여 두 플레이어 중의 어느 한 플레이어가 게임을 중지하기를 원한다고 가정한다.). 이를 달성하기 위해서, 플레이어 1 스레드(404)는 게임 콘트롤러 #2로부터의 “중지” 이벤트에 대한 관심만을 선택적으로 등록할 수 있으며 플레이어 2 스레드(405)는 게임 콘트롤러 #1로부터의 “중지” 이벤트에 대한 관심만을 선택적으로 등록할 수 있다. 이렇게 함으로써, 운영 시스템은 상대편 게임 콘트롤러로부터의 모든 이벤트를 스레드에 보내지 않아도 되므로 효율이 크게 향상된다. 도 4에서 각각의 큐( 및 각각의 대응하는 스레드)에 각 게임 콘트롤러가 발생한 모든 이벤트의 카피가 제공되면, 바람직하지 않은 이벤트를 처리하는데 훨씬 많은 시간이 낭비되머 CPU 시간 및 메모리가 낭비된다. 각 스레드가 어떤 유형의 이벤트에 대한 관심만을 별도로 등록할 수 있게 하여 커널이 각 스레드에 대한 유형의 이벤트만을 보내게 함으로써, 성능이 상당히 향상될 수 있다.In the configuration shown in FIG. 4, the Player 1 thread 404 wants the Player 1 thread 404 to know that Player 2 has pressed the "Stop" key on game controller # 2 and Player 1 has pressed the "Stop" key on game controller # 1. Assume that player 2 thread 405 wants to know (in other words, assume that either player, including the player operating the opposing controller, wants to stop the game). To accomplish this, player 1 thread 404 may optionally register only interest in the "stop" event from game controller # 2 and player 2 thread 405 may subscribe to the "stop" event from game controller # 1. Only interest may be selectively registered. This greatly improves efficiency because the operating system does not have to send all events from the opposing game controller to the thread. In FIG. 4, if each queue (and each corresponding thread) is provided with a copy of every event that each game controller has encountered, much more time is wasted in processing undesirable events, which wastes CPU time and memory. Performance can be significantly improved by allowing each thread to register only interest for a certain type of event so that the kernel only sends events of that type for each thread.

이와 마찬가지로, 메인 비디오 게임 스레드(403)가 각 플레이어 스레드로부터 “게임 이벤트”를 수신하는데 따라서 등록하는데 관심을 갖는다고 가정한다. 각 플레이어는 메인 비디오 게임 스레드(403)로부터 이벤트 예를 들어 다른 플레이어에 의한 블로가 너무 많기 때문에 문자가 사라지게 하는 명령을 수신한다. 전술한 등록된 관심은 등록된 유형의 이벤트에 대한 주석을 가진 도 4의 화살표로 도시했다.Similarly, assume that the main video game thread 403 is interested in registering as it receives a "game event" from each player thread. Each player receives a command from the main video game thread 403 to cause the character to disappear because of too many events, for example, a blow by another player. The foregoing registered interest is illustrated by the arrow in FIG. 4 with annotations for the registered type of event.

또한, 즉시 리플레이 스레드(instant replay thread)(406)가 시간 윈도우에 걸쳐 모든 이전의 행동을 검토할 수 있는 능력을 제공한다고 가정한다. 따라서, 그 스레드는 두 게임 콘트롤러 중의 어느 콘트롤러가 발생한 모든 이벤트에 대한 관심을 등록함으로써 그 콘트롤러가 발생한 각 이벤트의 그 자신의 카피를 얻는다. 이렇게 함으로써, 개개의 스레드가 서로 간에서 이벤트의 “카피”를 보낼 필요가 없다.It is also assumed that instant replay thread 406 provides the ability to review all previous behaviors over a time window. Thus, the thread gets its own copy of each event that the controller has generated by registering interest in all events that either controller has encountered. In this way, individual threads do not have to send a "copy" of the event to each other.

또다른 예로서, 온-라인 TV 가이드(on-line TV guide)는 튜닝 테이블(tuning tables)이 알려지지 않은 시간에서 다운로딩되게 할 수도 있다. 새로운 튜닝 테이블이 다운로딩되면, 그것은 이벤트를 구성할 수도 있다. 전형적으로, HCT에서 둘 이상의 스레드가 그같은 튜닝 테이블의 카피를 필요로 할 수도 있다. 따라서, 튜닝 테이블의 저장을 위해 사용되는 메모리를 자유롭게 하는 시기를 판단하는 문제가 있게 된다. 이것은 튜닝 테이블 이벤트에 대한 관심을 등록하는 각 스레드에 대한 튜닝 테이블의 전용 카피(private copy)를 생성하는 필터를 생성함으로써 달성된다. 따라서, 모든 스레드가 그들의 카피를 사용하여 행한 경우, 그들 스레드는 그들의 카피를 파괴할 것이므로, 메모리 영역이 자유롭게 될 수 있는 시기를 판단하는 문제가 회피된다.As another example, on-line TV guides may cause tuning tables to be downloaded at unknown times. When a new tuning table is downloaded, it may organize events. Typically, more than one thread in an HCT may need a copy of such a tuning table. Therefore, there is a problem of determining when to free the memory used for storing the tuning table. This is accomplished by creating a filter that creates a private copy of the tuning table for each thread that registers interest in tuning table events. Thus, if all the threads did using their copy, they would destroy their copy, thus avoiding the problem of judging when the memory area could be freed.

단일의 이벤트가 둘 이상의 필터를 트리거할 수 있고 또한 둘 이상의 스레드를 트리거할 수 있음에 주목해야 한다. 예를 들어, 하나의 스레드는 이벤트 레코더(recorder)(디버거(debugger))일 수 있으며, 그 스레드는 시스템에서 모든 이벤트의 카피를 얻기를 바랄 것이다. 이것을 달성하기 위해, 스레드는 모든 비트를 클리어(clear)하는 마스크를 생성할 것인데, 이 마스크는 어떠한 이벤트에 대한 관심을 나타낸다.It should be noted that a single event can trigger more than one filter and can also trigger more than one thread. For example, one thread may be an event recorder (debugger), which thread would like to get a copy of every event in the system. To accomplish this, the thread will create a mask that clears all bits, which indicate interest in any event.

이제, 본 발명의 또다른 실시예에 따라 어떻게 스레드 동기화 기능 예를 들어 세마포, 타이머, 미디어 이벤트, 예외, 메시지 등을 이벤트 오브젝트로 대체하고 이벤트 큐에 통합하여 메모리 요건 및 어플리케이션 개발을 최소화할 수 있는 지를 더욱 상세히 설명한다.Now, according to another embodiment of the present invention, how to replace thread synchronization functions such as semaphores, timers, media events, exceptions, messages, etc. with event objects and integrate them into the event queue to minimize memory requirements and application development. This will be explained in more detail.

커널이 아주 정확하게 시간을 처리한다고 생각한다. 클럭은 아주 고속(예를 들어, 25㎒)으로 시간을 발생하며, 이 클럭은 타이밍을 위해 사용될 수 있다. 본 발명의 여러 관점에 따르면, 시스템 내의 모든 이벤트는 (예를 들어 64-비트로 이루어진) 타임 스탬프를 포함할 수 있는데, 이 타임 스탬프는 시스템 클럭의 “스냅숏(snapshot)을 포함한다. 이벤트가 전달 또는 배달되면, 미래의 시간이 (현재의 시간 대신에) 이벤트 오브젝트 내로 삽입될 수 있다. 커널은, 지정 스레드에 이벤트를 즉시 배달하는 것이 아니라, 지정된 시간에 이를 때까지 이벤트를 홀드하고 전달하지 않는다. 따라서, 모든 이벤트는 경보신호로 될 수 있다. 예를 들어, 모든 키이누름에 의해 특정 시간에서 이벤트가 발생된다.I think the kernel handles time very accurately. The clock generates time at a very high speed (eg 25 MHz), which can be used for timing. According to various aspects of the present invention, every event in the system may include a time stamp (e.g. consisting of 64-bits), which includes a “snapshot” of the system clock. If an event is delivered or delivered, future time can be inserted into the event object (instead of the current time). The kernel does not immediately deliver the event to the specified thread, but it does not hold and deliver the event until the specified time is reached. Therefore, all events can be alarm signals. For example, every key press triggers an event at a specific time.

(이벤트의 스케쥴링을 위해) 어떤 시간에 도달했음을 검출하는 경보 프로시저를 기록하는 대신, 미래의 시간을 이벤트 오브젝트 내로 삽입하여 이벤트가 전달되는 때에 실제로 그 이벤트가 이벤트 오브젝트 내의 미래의 시간까지 배달되지 않도록 한다. 이렇게 함으로써, 부수적인 데이터 구조, 저장 영역 및 수개의 상태들 중의 어떤 것 내에 스레드가 있는 가를 나타내는 상태 검사(예를 들어 “경보신호 대기”)를 포함하는 경보신호를 커널 코드가 구현할 필요성이 없게 된다.Instead of recording an alert procedure that detects that a time has been reached (for scheduling an event), it inserts a future time into the event object so that when the event is delivered, the event is not actually delivered to a future time in the event object. do. This eliminates the need for kernel code to implement an alarm signal that includes a status check (eg, "wait for alarm") indicating which thread is in which of the additional data structures, storage area, and several states. .

도 5는 다음 이벤트 오브젝트, (이벤트 디스크립터에 대응하는) 코드, 시간, X, Y, Z 필드 및 “어느 곳(where)” 포인터를 포함하는, 커널 내의 이벤트 오브젝트(501)에 대한 한가지 가능한 구성을 도시한다. 각종 실시예에서, 이벤트 오브젝트(501)는 스레드에 의해 액세스가능한 “공중(public)” 부분과 스레드로부터 감추어진 “사설(private)” 부분을 포함하는 28-바이트로 구성될 수도 있다.5 illustrates one possible configuration for an event object 501 in the kernel, including the next event object, code (corresponding to the event descriptor), time, X, Y, Z fields, and a “where” pointer. Illustrated. In various embodiments, the event object 501 may be comprised of 28-bytes including a "public" portion accessible by the thread and a "private" portion hidden from the thread.

이벤트는 리스트 구성요소가 개별적으로 구성되는 “익스트루시브(extrusive)” 형태와 비교되는 “인트루시브(intrusive)” 형태 내로 통합될 수도 있다(즉, 리스트 내의 오브젝트는 그의 데이터 구조 내에 통합된 필드를 가진다.). “어느 곳(where)” 필드는 (미래의 시간에 큐에 이벤트를 배달하는) 스케쥴드_배달(scheduled_delivery)에 대해 사용되는 큐 포인터를 포함할 수도 있다. 스레드가 pk_DeliverEvent를 사용하여 코드 필드(디바이스 유형, 사례 등)(여기서 이벤트는 스레드에 의해서 생성됨) 세팅할 수도 있으며; 이와는 달리, 디바이스가 전술한 바와 같이 pk_PostEvent를 사용해서 코드 필드를 세팅할 수도 있다. X, Y, Z 필드는 “페이로드(payload)”를 포함하며; 이것 내에는 (데이터 구조에 대한 포인터를 포함하는) 어떠한 데이터도 포함될 수 있다.An event may be integrated into an "intrusive" form, which is compared to an "extrusive" form in which the list elements are individually configured (ie, objects in the list are fields integrated into their data structures). Has a). The “where” field may include a queue pointer used for scheduled_delivery (delivering events to the queue at a later time). The thread may use pk_DeliverEvent to set code fields (device type, case, etc.) where the event is generated by the thread; Alternatively, the device may set the code field using pk_PostEvent as described above. The X, Y, and Z fields contain a “payload”; This can include any data (including pointers to data structures).

하나의 예로서, 이벤트 구조는 경보신호의 셋업을 위해 사용될 수 있다. 게임은 3분 라운드(round)를 가질 수도 있다. 그 라운드의 끝에서, 벨이 울릴 것이다. 스레드는 pk_ScheduledDelivery(부록 1 참조)의 호출에 의해 경보신호를 세팅하고 시간을 이제부터 3분으로 세팅하며, 이벤트 코드(X, Y, Z) 및 스레드 소유의 큐를 “어느 곳(where)” 포인터를 특정할 수 있다. 스레드는 그 다음 pk_NextEvent를 사용하여 다음 이벤트가 그의 큐를 떠나게 한다. 다른 API 호출들을 사용할 지라도, 단일의 작은 데이터 구조를 사용할 수 있어, 별개의 경보 시스템에 대한 필요성이 배제되며 커널에 의해 경보에 대한 특정 기능을 제공할 필요성이 배제된다. 주목할 것은 스레드는 오브젝트를 “프리-타임스탬프(pre-timestamp)"를 행할 수 있고 그 다음 커널은 실제 시간이 스탬핑되는 때 동일한 공간을 재사용할 수 있다는 것이다.As one example, an event structure can be used for the setup of an alarm signal. The game may have a three minute round. At the end of the round, the bell will ring. The thread sets an alarm signal by calling pk_ScheduledDelivery (see Appendix 1), sets the time to 3 minutes from now, and points the event code (X, Y, Z) and the thread's own queue to the "where" pointer. Can be specified. The thread then uses pk_NextEvent to cause the next event to leave its queue. Although other API calls can be used, a single small data structure can be used, eliminating the need for a separate alert system and eliminating the need to provide specific functionality for alerts by the kernel. Note that the thread can "pre-timestamp" the object and then the kernel can reuse the same space when the actual time is stamped.

따라서, 경보 기능을 이벤트 배달 기능에 통합하면, 메모리, 처리 시간 및 프로그래머 노력이 절약된다. 스레드가 “숙면(sleeping)”하는 때, 커널은 스레드가 세마포 또는 경보 또는 어떤 다른 유형의 동기화 이벤트를 기다리는 지의 여부를 판단할 필요가 없다. 스레드가 숙면할 때마다, 운영 시스템은 언제나 이벤트를 그의 큐 상에서 기다린다. 이것에 의해 또한 커널이 더욱 작아지게 된다. 이와는 반대로, 종래의 커널의 경우에는, 스레드가 경보, 세마포, 큐 대기(queue wait), 메시지(message wait) 등을 기다리는 지의 여부를 판단하기 위한 명령을 실행할 필요가 있다.Thus, integrating the alert function into the event delivery function saves memory, processing time and programmer effort. When a thread "sleeps", the kernel does not need to determine whether the thread is waiting for a semaphore or alarm or some other type of synchronization event. Every time a thread sleeps, the operating system always waits for events on its queue. This also makes the kernel smaller. In contrast, in the conventional kernel, it is necessary to execute an instruction for determining whether a thread is waiting for an alarm, semaphore, queue wait, message wait, or the like.

제 2의 통합 예에는 세마포가 포함된다(도 6). 두 개의 스레드(602 및 603)가 단일 프린터의 사용을 필요로 한다고 가정한다. 종래의 해결방안은 두 스레드가 응답하는 세마포를 제공하고자 하는 것이다(즉, 그들 스레드는 “세마포 대기(semaphore wait)” 상태에 있고, 커널은 세마포 대기 데이터 구조를 가진 “세마포 대기(semaphore wait)” 큐 상에 스레드를 놓는다.).A second example of integration includes a semaphore (FIG. 6). Assume that two threads 602 and 603 require the use of a single printer. The conventional solution is to provide semaphores in which two threads respond (ie, those threads are in a “semaphore wait” state, and the kernel is a “semaphore wait” with a semaphore wait data structure). Put a thread on the queue).

종래의 방법들과는 반대로, 본 발명은 이벤트 오브젝트의 사용을 생각한다. 이벤트 큐를 사용하여 세마포를 구현하기 위해, (전형적으로 프린터 드라이브(601)에 의해) 큐(604)를 생성하고 그 큐 상에 단일의 이벤트(604a)를 배치한다. 자원(예로서, 프린터)을 필요로 하는 제 1 스레드(602)는 pk_NextEvent(부록 1 참조)에 대한 호출을 생성하여, 프린터 세마포 큐(604)를 특정한다. 이같은 기능에 의해, 큐 상에 어떠한 이벤트도 없을 경우에는 스레드가 대기하게 되며, 큐 상에 이벤트가 있을 경우에는 이벤트가 추출된다. 따라서, 큐 상에 오브젝트가 여전히 있다고 가정하면, 커널(605)은 그 오브젝트를 큐(604)로부터 제거하여 그 이벤트를 스레드(602)에 배달한다. 다른 스레드(603)가 (pk_NextEvent의 호출에 의해) 자원을 사용하려고 할 경우, 이벤트(604a)가 제 1 스레드(602)에 의해 큐(604)에 반환될 때까지 그 스레드는 대기하게 될 것이다. 제 1 스레드(602)가 자원을 사용하여 마무리하는 때, 이벤트를 큐(604)에 반환하는 pk_ReturnEvent(부록 1 참조)를 호출하여, 제 2 스레드(603)가 그의 pk_NextEvent 기능을 최종적으로 실행할 수 있게 한다.In contrast to conventional methods, the present invention contemplates the use of an event object. To implement a semaphore using an event queue, create a queue 604 (typically by printer driver 601) and place a single event 604a on that queue. A first thread 602 that needs a resource (eg, a printer) creates a call to pk_NextEvent (see Appendix 1) to specify a printer semaphore queue 604. This feature causes the thread to wait when there are no events on the queue, and extracts events when there are events on the queue. Thus, assuming that an object is still on the queue, kernel 605 removes the object from queue 604 and delivers the event to thread 602. If another thread 603 tries to use the resource (by calling pk_NextEvent), that thread will wait until event 604a is returned to queue 604 by first thread 602. When the first thread 602 finishes using the resource, it calls pk_ReturnEvent (see Appendix 1) which returns an event to the queue 604 so that the second thread 603 can finally execute its pk_NextEvent function. do.

따라서, 바람직한 실시예에서, 커널(605)은 제 2 스레드(603)를 “세마포 대기(waiting for semaphore)” 또는 “경보 대기(waiting for alarm)” 또는 어떤 다른 유형의 모드에 놓지 않고; 그 대신, 일반적인 이벤트의 전형적인 예가 사용된다. 이렇게 함으로써, 커널의 효율이 향상되는데, 그 이유는 커널이 모든 유형의 여러 다른 동작(all types of different activities)에 대해 개별적인 큐를 유지할 필요가 없고 스레드의 상태의 시험 시에 스레드가 단지 하나의 상태에 있을 수 있음을 커널이 이미 알고 있기 때문이다. 또한, 동일한 일반적인 이벤트 오브젝트를 사용하여 그 시스템의 세마포를 구현할 수 있으며; 어떠한 특정 세마포 데이터도 규정할 필요가 없다.Thus, in a preferred embodiment, the kernel 605 does not place the second thread 603 in "waiting for semaphore" or "waiting for alarm" or any other type of mode; Instead, typical examples of common events are used. This improves the kernel's efficiency, because the kernel does not have to maintain separate queues for all types of different activities and the thread is only in one state when testing the state of the thread. This is because the kernel already knows it can be. In addition, the same general event object can be used to implement semaphores of the system; There is no need to specify any specific semaphore data.

상기한 예는 다수의 자원에 확장 적용될 수 있다. 예를 들어, 도 6에서, 제 2 프린터(606)(그러나, 잠재적으로는 두 개의 프린터를 사용할 필요가 있을 수도 있는 셋 이상의 스레드)가 있는 경우, 각 프린터는 이벤트를 큐(604) 상에 전달할 수도 있고; pk_NextEvent를 호출한 앞쪽의 두 스레드는 프린터를 사용할 것이고 세 번째의 호출 스레드는 커널에 의해 이벤트 대기(waiting-for-event) 상태에 있을 것이다. 따라서, 세마포의 수에 대해 어떠한 사전-세팅된 제한(pre-set limit)도 특정할 필요가 없고; 필요에 따라 큐를 크게 할 수 있다는 점에서 또다른 장점이 있다. 따라서, 어떤 것에 대해서도 이벤트를 사용할 수 있으며; 심지어는 커널이 “세마포” 동기화 메카니즘을 알고 있을 필요가 없다.The above example can be extended to multiple resources. For example, in FIG. 6, if there is a second printer 606 (but potentially three or more threads that may need to use two printers), each printer will send an event on the queue 604. May; The first two threads that call pk_NextEvent will use the printer, and the third calling thread will be waiting for events by the kernel. Therefore, no pre-set limit needs to be specified for the number of semaphores; Another advantage is that the queue can be enlarged as needed. Thus, you can use events for anything; Even the kernel does not need to know the "semaphore" synchronization mechanism.

중복성을 배제하고 이벤트 시스템을 간단히 하기 위해, 다음과 같은 유형의 조정 메카니즘(coordination mechanism) 모두를 이벤트로서 분류하고 부록 1에 보인 것들과 같은 기능들을 사용해서 구현할 수 있다.To eliminate redundancy and simplify the event system, all of the following types of coordination mechanisms can be categorized as events and implemented using features such as those shown in Appendix 1.

-- 모두 동기화 오브젝트로서 스레드들 간에서 통과되는 세마포, 메시지 및 큐 메시지를 포함하는 스레드 동기화(thread synchronization)-Thread synchronization, including semaphores, messages, and queue messages, all passed between threads as synchronization objects

-- 스레드의 우선순위를 업그레이드하기 위한 요구가 만들어 졌음을 알리는 요구 스케쥴링(demand scheduling)-Demand scheduling, indicating that a request has been made to upgrade the priority of a thread.

-- 타이머 이벤트 및 지연된 조치(timer events and delayed actions)(이벤트가 즉시 또는 특정된 미래의 시간에 전달될 수 있음)-Timer events and delayed actions (events can be delivered immediately or at a specified future time)

-- 스레드간 예외 처리(inter-thread exception handling)(이벤트는 스레드가 예외를 발생할 때마다 발생할 수 있음Inter-thread exception handling (events can occur whenever a thread throws an exception)

-- 원격 또는 게임 콘트롤러 상의 버튼을 누르고, 볼륨을 변경하고, 포인터 디바이스를 이동시키는 등의 사용자 인터페이스 조치(user interface actions)User interface actions such as pressing a button on a remote or game controller, changing volume, moving the pointer device, etc.

-- 오디오 재생을 개시하고, 이동 종점에 이르고, 매체를 디바이스 내에 삽입하거나 매체를 디바이스로 부터 방출시키는 등의 매체 이벤트-Media events such as initiating audio playback, reaching the end of movement, inserting media into the device, or ejecting the media from the device

-- 용도 특정 이벤트(application-specific events)(사용자 정의 이벤트(user-defined events))-Application-specific events (user-defined events)

본 발명의 많은 변형 및 변경이 가능한데, 단지 예로서 특정 값을 언급했다. 예를 들어, 본 명세서에서는 “스레드”를 언급하고 있으나, 이러한 용어는 운영 시스템에 의해서 스케쥴링될 수 있는 프로세스, 타스크 또는 다른 엔티티도 포함하는 것으로서 이해되어야 한다. 다른 예로서, 이벤트에 대한 관심을 등록하는 바와 같은 각종 기능을 수행하기 위한 응용 프로그래밍 인터페이스를 설명하고 있으나, 등가의 메카니즘을 사용하여 동일한 기능을 구현할 수 있음은 물론이다. 또한, 단지 예로서 특정 기능명을 언급했다. 따라서, 당업자라면, 청구의 범위 내에서 본 발명을 상술한 것과는 다른 방식으로 실시할 수도 있음을 알 것이다.Many modifications and variations of the present invention are possible, with reference to specific values as examples only. For example, although reference is made herein to "threads," such terms are to be understood as including processes, tasks or other entities that may be scheduled by the operating system. As another example, an application programming interface for performing various functions such as registering interest in an event is described, but the same function may be implemented using an equivalent mechanism. Also, specific function names are mentioned by way of example only. Thus, it will be apparent to one skilled in the art that the present invention may be practiced otherwise than as described above within the scope of the claims.

Claims (18)

서로 다른 다수의 이벤트(a plurality of different events)가 발생할 수 있고 서로 다른 다수의 스레드(a pluality of different threads)가 실행될 수 있는 가정용 통신 터미널(home communication terminal: HCT) 상에서 실행하기 위한 운영 시스템 커널(operating system kernel)에 있어서,An operating system kernel (HCT) to run on a home communication terminal (HCT) where a plurality of different events can occur and a plurality of different threads can run. operating system kernel), 상기 서로 다른 다수 스레드의 각각이 상기 서로 다른 다수 이벤트 중의 한 이벤트에 대한 관심을, 그 관심의 이벤트에 대한 한정을 나타내는 파라미터(parameters which indicate qualifications for the one event of interest)를 특정함으로써, 등록할 수 있게 하는 이벤트 등록 기능(event registering function)과;Each of the different multiple threads may register interest in one of the different multiple events by specifying parameters which indicate qualifications for the one event of interest. An event registering function; 상기 이벤트 등록 기능을 사용하여 특정한 하나 이상의 파라미터를 제각기 포함하는 이벤트 오브젝트들의 리스트(a list of event objects)를 포함하는 데이터 구조와;A data structure including a list of event objects each including a specific one or more parameters using the event registration function; 상기 서로 다른 다수 이벤트 중의 하나에 대응하는 이벤트 디스크립터(an event descriptor)의 수신에 응답하여 상기 데이터 구조를 횡단하고 상기 이벤트 디스크립터를 상기 이벤트 오브젝트들의 각각 내에 있는 하나 이상의 파라미터와 비교하며, 상기 이벤트 디스크립터가 상기 이벤트 오브젝트들 중의 특정 이벤트 오브젝트 내에 있는 하나 이상의 파라미터와 일치한다는 판단에 응답하여 상기 한 이벤트에 대한 등록된 관심을 가진 스레드에 상기 이벤트 디스크립터의 적어도 일부분을 제공하는 이벤트 조정기(event handler)In response to receiving an event descriptor corresponding to one of the different multiple events, traversing the data structure and comparing the event descriptor with one or more parameters in each of the event objects, wherein the event descriptor is An event handler that provides at least a portion of the event descriptor to a thread that has a registered interest in the event in response to determining that it matches one or more parameters in a particular event object of the event objects. 를 포함하는 것을 특징으로 하는 운영 시스템 커널.Operating system kernel comprising a. 제 1 항에 있어서,The method of claim 1, 상기 이벤트 오브젝트는 코드 필드(code field)를 포함하는 제 1 파라미터 및 마스크 필드(mask field)를 포함하는 제 2 파라미터를 비롯한 적어도 두개의 파라미터를 포함하고, 상기 마스크 필드는 상기 이벤트 디스크립터 내에 있는 다수의 필드 중의 어떤 것이 적절한 지를 나타내며, 상기 코드 필드는 상기 이벤트 디스크립터 내에 있는 각각의 적절한 필드와 일치해야만 하는 값을 나타내는 것을 특징으로 하는 운영 시스템 커널.The event object includes at least two parameters, including a first parameter including a code field and a second parameter including a mask field, the mask field being a plurality of parameters within the event descriptor. Operating system kernel, which indicates which of the fields is appropriate, and wherein the code field represents a value that must match each suitable field in the event descriptor. 제 2 항에 있어서,The method of claim 2, 상기 이벤트 조정기는 상기 이벤트 디스크립터의 적어도 일부분과 상기 마스크 필드를 승산하며 비교를 위해 승산 결과를 상기 코드 필드와 비교하는 것을 특징으로 하는 운영 시스템 커널.The event coordinator multiplies the mask field with at least a portion of the event descriptor and compares the multiplication result with the code field for comparison. 제 3 항에 있어서,The method of claim 3, wherein 상기 이벤트 조정기는 상기 이벤트 오브젝트 내의 지정된 큐(queue) 상에 상기 이벤트 디스크립터의 적어도 일부분을 배치하는 것을 특징으로 하는 운영 시스템 커널.And the event handler places at least a portion of the event descriptor on a specified queue in the event object. 제 1 항에 있어서,The method of claim 1, 상기 하나 이상의 파라미터는 한정될 디바이스 유형 및 이벤트 유형을 나타내는 것을 특징으로 하는 운영 시스템 커널.Wherein the one or more parameters indicate a device type and an event type to be defined. 제 1 항에 있어서,The method of claim 1, 상기 하나 이상의 파라미터는 제각기 HCT에 결합된 디바이스로부터 키이누름(key press)을 표현하는 데이터 값을 나타내는 것을 특징으로 하는 운영 시스템 커널.Wherein said at least one parameter is indicative of a data value representing a key press from a device coupled to the respective HCT. 제 1 항에 있어서,The method of claim 1, 상기 하나 이상의 파라미터는 상기 이벤트 디스크립터를 더욱 한정하기 위해 상기 이벤트 조정기에 의해서 실행될 필터(filter)를 포함하는 것을 특징으로 하는 운영 시스템 커널.Wherein said at least one parameter comprises a filter to be executed by said event coordinator to further define said event descriptor. 제 7 항에 있어서,The method of claim 7, wherein 상기 필터는 스레드와 관련하여 실행되는 것이 아니라 상기 커널과 관련하여 실행되는 것을 특징으로 하는 운영 시스템 커널.And the filter is executed in conjunction with the kernel rather than in association with a thread. 제 7 항에 있어서,The method of claim 7, wherein 상기 필터는 상기 이벤트를 더욱 한정하기 위해 윈도우(window)를 참조해서 커서(cursor)의 위치를 검사하는 것을 특징으로 하는 운영 시스템 커널.The filter checks the position of the cursor with reference to a window to further define the event. 제 7 항에 있어서,The method of claim 7, wherein 상기 이벤트 조정기는 상기 이벤트 디스크립터를 상기 이벤트 오브젝트들의 각각 내에 있는 하나 이상의 파라미터와 비교하며, 상기 이벤트 디스크립터가 상기 이벤트 오브젝트들 중의 특정 이벤트 오브젝트 내에 있는 하나 이상의 파라미터와 일치한다는 판단에 응답하여, 상기 한 이벤트에 대한 등록된 관심을 가진 스레드에 상기 이벤트 디스크립터의 적어도 일부분을 제공하기 전에 상기 필터를 실행하는 것을 특징으로 하는 운영 시스템 커널.The event coordinator compares the event descriptor with one or more parameters in each of the event objects, and in response to determining that the event descriptor matches one or more parameters in a particular event object of the event objects, the one event Operating the filter before providing at least a portion of the event descriptor to a thread having a registered interest in the operating system kernel. 제 1 항에 있어서,The method of claim 1, 상기 서로 다른 다수 스레드의 각각이 이전에 등록된 이벤트 관심을 제거할 수 있게 하는 이벤트 등록 기능을 더 포함하는 것을 특징으로 하는 운영 시스템 커널.And an event registration function that allows each of the different plurality of threads to remove previously registered event interest. 다수의 스레드를 가진 가정용 통신 터미널 상에서 실행하기 위한 운영 시스템 커널에서 이벤트를 필터링하는 방법에 있어서,A method of filtering events in an operating system kernel for running on a multi-threaded home communication terminal, (1) 상기 다수 스레드 중 한 스레드로부터의 하나 이상의 이벤트에 대한 관심을, 그 관심 스레드에 제공될 이벤트들의 유형을 제한하는 하나 이상의 파라미터를 포함하는 데이터 구조를 생성함으로써, 등록하는 단계와;(1) registering a interest in one or more events from one of the plurality of threads by creating a data structure that includes one or more parameters that limit the types of events to be provided to the thread of interest; (2) 이벤트가 상기 시스템에서 발생했음을 검출하고 이에 응답해서 그 이벤트의 상세를 설명하는 이벤트 디스크립터를 생성하는 단계와;(2) detecting that an event has occurred in the system and in response generating an event descriptor describing the details of the event; (3) 상기 운영 시스템 커널에서, 상기 단계(2)에서 생성된 상기 이벤트 디스크립터를 상기 단계(1)에서 생성된 데이터 구조 내에 있는 상기 하나 이상의 파라미터와 비교하며, 상기 이벤트 디스크립터가 상기 이벤트와 일치한다는 판단에 응답하여 상기 데이터 구조에 대응하는 스레드에 상기 이벤트 디스크립터의 적어도 일부분을 제공하는 단계(3) in the operating system kernel, compare the event descriptor generated in step (2) with the one or more parameters in the data structure created in step (1), wherein the event descriptor matches the event. Providing at least a portion of the event descriptor to a thread corresponding to the data structure in response to the determination. 를 포함하는 것을 특징으로 하는 운영 시스템 커널에서의 이벤트 필터링 방법.Event filtering method in the operating system kernel, characterized in that it comprises a. 제 12 항에 있어서,The method of claim 12, 상기 단계(1)은 코드 필드 및 마스크 필드를 포함하는 데이터 구조를 생성하는 단계를 포함하고, 상기 마스크 필드는 상기 이벤트 디스크립터의 어떤 부분들이 상기 단계(3)의 비교에 적절한 지를 나타내며, 상기 코드 필드는 상기 이벤트 디스크립터 내의 각각의 적절한 부분과 일치해야만 하는 값을 나타내는 것을 특징으로 하는 운영 시스템 커널에서의 이벤트 필터링 방법.The step (1) comprises generating a data structure comprising a code field and a mask field, the mask field indicating which portions of the event descriptor are suitable for comparison of the step (3), the code field Indicates a value that must match each suitable portion in the event descriptor. 제 12 항에 있어서,The method of claim 12, 상기 단계(1)은 한정될 디바이스 유형 및 이벤트 유형을 나타내는 파라미터들을 이용하는 단계를 포함하는 것을 특징으로 하는 운영 시스템 커널에서의 이벤트 필터링 방법.Wherein said step (1) comprises using parameters indicative of a device type and an event type to be defined. 제 12 항에 있어서,The method of claim 12, 상기 단계(1)은 상기 이벤트 디스크립터를 더욱 한정하기 위해 상기 커널에 의해서 실행될 필터를 특정하는 단계를 포함하고, 상기 단계(3)은 상기 스레드에 상기 이벤트 디스크립터의 적어도 일부분을 제공하기 전에 상기 특정된 필터를 실행하는 단계를 포함하는 것을 특징으로 하는 운영 시스템 커널에서의 이벤트 필터링 방법.The step (1) includes specifying a filter to be executed by the kernel to further define the event descriptor, wherein the step (3) includes specifying the filter before providing at least a portion of the event descriptor to the thread. And a step of executing a filter. 제 15 항에 있어서,The method of claim 15, 상기 단계(3)은 상기 이벤트 디스크립터의 적어도 일부분을 상기 스레드에 제공하기 전에 변형하는 필터를 실행하는 단계를 포함하는 것을 특징으로 하는 운영 시스템 커널에서의 이벤트 필터링 방법.And said step (3) comprises executing a transforming filter before providing at least a portion of said event descriptor to said thread. 세마포 기능이 없는 운영 시스템 커널을 사용하여 세마포 기능을 가정용 통신 터미널(HCT) 상에서 구현하기 위한 방법에 있어서,A method for implementing semaphore functionality on a home communication terminal (HCT) using an operating system kernel without semaphore functionality, (1) 상기 HCT 상에서 실행하는 스레드들에 액세스가능한 커널-공급 큐 생성 기능(kernel-supplied queue creation function)을 사용해서 공유 자원(shared resource)에 대한 큐를 생성하는 단계와;(1) creating a queue for shared resources using a kernel-supplied queue creation function accessible to threads executing on the HCT; (2) 상기 HCT 상에서 실행하는 스레드에 액세스가능한 커널-공급 오브젝트 배달 기능(kernel-supplied object delivery function)을 사용해서 상기 큐 상에 이벤트 오브젝트를 저장하여 상기 공유 자원의 이용가능성을 나타내는 단계와;(2) indicating an availability of the shared resource by storing an event object on the queue using a kernel-supplied object delivery function accessible to a thread executing on the HCT; (3) 제 1 스레드로부터, 상기 큐로부터 상기 이벤트 오브젝트를 검색하는 커널-공급 오브젝트 검색 기능(kernel-supplied object retrieval function)을 실행하는 단계로서, 상기 이벤트 오브젝트가 상기 큐 상에 있지 않은 경우에 상기 제 1 스레드는 상기 커널에 의해 중지되는(is suspended) 단계와;(3) executing a kernel-supplied object retrieval function for retrieving the event object from the queue from a first thread, wherein the event object is not on the queue; A first thread is suspended by the kernel; (4) 제 2 스레드로부터, 상기 큐로부터 상기 이벤트 오브젝트의 검색을 시도하는 커널-공급 오브젝트 검색 기능을 실행하는 단계로서, 상기 이벤트 오브젝트를 상기 큐로부터 검색하지 못한 경우에 상기 제 2 스레드를 중지하는 단계와;(4) executing a kernel-supply object search function that attempts to retrieve the event object from the queue, from a second thread, stopping the second thread if the event object is not retrieved from the queue. Steps; (5) 제 3 스레드로부터, 상기 이벤트 오브젝트를 상기 큐에 다시 반환하는 커널-공급 오브젝트 해제 기능(kernel-supplied object release function)을 실행한 후, 상기 단계(4)에서 개시된 상기 오브젝트 검색 기능의 동작을 재개하는 단계(5) an operation of the object retrieval function disclosed in step (4) after executing a kernel-supplied object release function of returning the event object back to the queue from a third thread; Steps to resume 를 포함하는 것을 특징으로 하는 세마포 기능 구현 방법.A semaphore function implementation method comprising a. 제 17 항에 있어서,The method of claim 17, 상기 단계(2)는 다수 공유 자원의 각각에 대응하는 다수의 이벤트 오브젝트를 상기 큐 상에 저장하는 단계를 포함하는 것을 특징으로 하는 세마포 기능 구현 방법.And said step (2) comprises storing a plurality of event objects corresponding to each of a plurality of shared resources on said queue.
KR1019980704949A 1995-12-29 1996-12-23 Operating system kernel and how to filter events in it and how to implement semaphores KR19990076823A (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US57820395A 1995-12-29 1995-12-29
US8/578,203 1995-12-29
PCT/US1996/020126 WO1997024671A1 (en) 1995-12-29 1996-12-23 Event filtering feature for a computer operating system in a home communications terminal

Publications (1)

Publication Number Publication Date
KR19990076823A true KR19990076823A (en) 1999-10-25

Family

ID=24311856

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980704949A KR19990076823A (en) 1995-12-29 1996-12-23 Operating system kernel and how to filter events in it and how to implement semaphores

Country Status (4)

Country Link
EP (1) EP0880745A4 (en)
KR (1) KR19990076823A (en)
AU (1) AU1424697A (en)
WO (1) WO1997024671A1 (en)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6711620B1 (en) * 1999-04-14 2004-03-23 Matsushita Electric Industrial Co. Event control device and digital broadcasting system
JP2003519831A (en) * 1999-12-30 2003-06-24 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ Multitasking software architecture
CN100538622C (en) * 2004-05-09 2009-09-09 意法半导体有限公司 A kind of method that improves incident transmission and processing in the apparatus of digital television receiving
US9652230B2 (en) 2013-10-15 2017-05-16 Mill Computing, Inc. Computer processor employing dedicated hardware mechanism controlling the initialization and invalidation of cache lines
US11093251B2 (en) 2017-10-31 2021-08-17 Micron Technology, Inc. System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network
US11132233B2 (en) 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11126587B2 (en) * 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US11119782B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11513837B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric
US11157286B2 (en) 2018-05-07 2021-10-26 Micron Technology, Inc. Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US11513838B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread state monitoring in a system having a multi-threaded, self-scheduling processor
US11074078B2 (en) 2018-05-07 2021-07-27 Micron Technology, Inc. Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion
US11068305B2 (en) 2018-05-07 2021-07-20 Micron Technology, Inc. System call management in a user-mode, multi-threaded, self-scheduling processor
US11119972B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11513840B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US11513839B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Memory request size management in a multi-threaded, self-scheduling processor

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339418A (en) * 1989-06-29 1994-08-16 Digital Equipment Corporation Message passing method
EP0422310A1 (en) * 1989-10-10 1991-04-17 International Business Machines Corporation Distributed mechanism for the fast scheduling of shared objects
US5325536A (en) * 1989-12-07 1994-06-28 Motorola, Inc. Linking microprocessor interrupts arranged by processing requirements into separate queues into one interrupt processing routine for execution as one routine
US5301270A (en) * 1989-12-18 1994-04-05 Anderson Consulting Computer-assisted software engineering system for cooperative processing environments
US5625821A (en) * 1991-08-12 1997-04-29 International Business Machines Corporation Asynchronous or synchronous operation of event signaller by event management services in a computer system
US5321837A (en) * 1991-10-11 1994-06-14 International Business Machines Corporation Event handling mechanism having a process and an action association process
EP0537721B1 (en) * 1991-10-15 1998-11-25 Hewlett-Packard Company Hardware-configured operating system kernel for a multitasking processor
US5430875A (en) * 1993-03-31 1995-07-04 Kaleida Labs, Inc. Program notification after event qualification via logical operators
US5566337A (en) * 1994-05-13 1996-10-15 Apple Computer, Inc. Method and apparatus for distributing events in an operating system

Also Published As

Publication number Publication date
WO1997024671A1 (en) 1997-07-10
EP0880745A1 (en) 1998-12-02
EP0880745A4 (en) 1999-04-21
AU1424697A (en) 1997-07-28

Similar Documents

Publication Publication Date Title
KR19990076823A (en) Operating system kernel and how to filter events in it and how to implement semaphores
KR100352844B1 (en) Audio image interactive signal processing method and apparatus
US5889988A (en) Debugger for debugging tasks in an operating system virtual device driver
US5566337A (en) Method and apparatus for distributing events in an operating system
CN108521607B (en) Method and device for processing advertisements in video, storage medium and intelligent terminal
JPH08235091A (en) Method and system for sending out of application to client station
US20150326897A1 (en) Event booking mechanism
US8578439B1 (en) Method and apparatus for presentation of intelligent, adaptive alarms, icons and other information
Gallmeister et al. Early experience with POSIX 1003.4 and POSIX 1003.4 a
CN111736785A (en) Control method, device and equipment for screen projection playing and computer storage medium
CN106851595B (en) Ordered broadcast processing method, device and terminal device
CN108650521A (en) A kind of live broadcasting method, device and multimedia play system
CN110798693A (en) User management method, server and computer readable storage medium
US6195715B1 (en) Interrupt control for multiple programs communicating with a common interrupt by associating programs to GP registers, defining interrupt register, polling GP registers, and invoking callback routine associated with defined interrupt register
CN1439223A (en) Multimedia apparatus receiving audio-visual broadcast
CN114025170A (en) Video playing method and device, computer equipment and computer readable storage medium
CN113938742A (en) Control method, system, equipment and storage medium for automatically projecting screen content playing
CN111552537A (en) Theme switching method and device, computer equipment and storage medium
CN114666447B (en) Remote volume control method and device for physical keys, storage medium and intelligent terminal
JP2002512713A (en) Access control system
US8291434B1 (en) Computer system and method to dispatch and receive a message responsive to the occurrence of an event
CN117435355A (en) Data processing method and related equipment
JPH0721063A (en) Computer system monitoring device
CN115407699A (en) Device control method, device control apparatus, medium, and electronic device
CN112433803A (en) Method for realizing multi-task switching in radio Web single page application

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application