KR102149171B1 - 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치 - Google Patents

산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치 Download PDF

Info

Publication number
KR102149171B1
KR102149171B1 KR1020180057344A KR20180057344A KR102149171B1 KR 102149171 B1 KR102149171 B1 KR 102149171B1 KR 1020180057344 A KR1020180057344 A KR 1020180057344A KR 20180057344 A KR20180057344 A KR 20180057344A KR 102149171 B1 KR102149171 B1 KR 102149171B1
Authority
KR
South Korea
Prior art keywords
module
type
execution
real
time
Prior art date
Application number
KR1020180057344A
Other languages
English (en)
Other versions
KR20190132097A (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 강원대학교산학협력단
Priority to KR1020180057344A priority Critical patent/KR102149171B1/ko
Publication of KR20190132097A publication Critical patent/KR20190132097A/ko
Application granted granted Critical
Publication of KR102149171B1 publication Critical patent/KR102149171B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/418Total factory control, i.e. centrally controlling a plurality of machines, e.g. direct or distributed numerical control [DNC], flexible manufacturing systems [FMS], integrated manufacturing systems [IMS] or computer integrated manufacturing [CIM]
    • G05B19/41865Total factory control, i.e. centrally controlling a plurality of machines, e.g. direct or distributed numerical control [DNC], flexible manufacturing systems [FMS], integrated manufacturing systems [IMS] or computer integrated manufacturing [CIM] characterised by job scheduling, process planning, material flow
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/20Pc systems
    • G05B2219/25Pc structure of the system
    • G05B2219/25419Scheduling
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Manufacturing & Machinery (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Automation & Control Theory (AREA)
  • Debugging And Monitoring (AREA)

Abstract

산업용 로봇의 실시간 스케줄링 방법 및 장치가 개시된다. 일 실시예에 따른 실시간 스케줄링 방법은, 프로세스 및 스레드에 대한 정보를 수신하는 단계와, 상기 정보를 이용하여 모듈 파일(module file)을 생성하는 단계와, 상기 모듈 파일로부터 상기 정보를 추출하여 스케줄링 테이블을 생성하는 단계와, 상기 스케줄링 테이블에 기초하여 상기 프로세스 및 상기 스레드를 실행하는 단계를 포함한다.

Description

산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치{METHOD AND APPARATUS OF REAL-TIME SCHEDULING FOR INDUSTRIAL ROBOT SYSTEM}
아래 실시예들은 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치에 관한 것이다.
최근에는 다양한 형태의 산업용 로봇이 존재하는데, 주로 조립 및 용접, 이송 공정에 사용되는 경우가 대부분이다. 그러나 스마트 공장이 로봇 기반으로 진화하면서, 로봇의 역할이 강화되고 있다. 즉 스마트 공장에서는 모바일 매니퓰레이터(mobile manipulator)가 공정 시스템을 연결시키고, 공정 라인들을 재구성 가능하게 한다. 즉 산업용 로봇이 다른 입출력 모듈들을 제어하는 산업용 로봇 시스템으로 변화하고 있다.
이에 최근의 스마트 공장 시스템은 인간-로봇 협업을 필요로하고 있다. 이러한 태스크를 위해서는 공정의 변화에 따라 유연하게 대응할 수 있는 로봇 시스템의 개발이 필요하다.
특히 이러한 변화의 중심에는 IT 기술이 존재하고 있다. 그러나 기존 산업용 로봇 기술로는 빠르게 변하는 IT 기술을 접목하는 것이 어렵다.
이에 따라 미들웨어 기술이 로봇에 사용되기 시작하였다. 그러나 미들웨어 기술은 로봇에 활용되는 다양한 SW 모듈들을 쉽게 활용하는데 있어서 어려움이 많아, 특정 SW(Software) 모듈만을 활용하고 있다.
이러한 특정 SW 모듈은 주기적으로 수행하는 모션/휠 제어 명령 생성 모듈, 키네틱 및 인버스 키네틱 모듈(kinematics and inverse kinematics module) 등이 있다. 현 로봇 미들웨어들은 이러한 모듈들을, 엄밀하게 말하면, 주기적으로(periodically) 수행시키는 것이 아니고 순환적으로(cyclically) 수행시킨다고 말할 수 있다.
즉, 주기가 설정되면 해당 모듈이 수행되고 나머지 시간동안 슬립(sleep)을 한 후 다시 웨이크업(wakeup) 하여 해당 모듈이 수행되는 형태로 동작한다. 이 경우 사이클 시간(cyclic time)이 주기와 같이 정확하게 동작하지 않고 약간 슬라이딩(sliding)하는 문제가 있다. 이러한 시간이 누적이 되면 주기들이 사라지는 경우가 발생한다.
현존하는 로봇용 미들웨어에서 이벤트가 처리되는 경우는 거의 없다. 물론 SW 모듈이 이벤트를 전송하여 해당 이벤트를 처리하는 경우는 존재하지만, 이 경우는 실시간으로 처리하지는 않는다.
여기서 사이클 시간(cycle time)과 주기(period)는 구분되어야 하는 데, 사이클 시간은 일정시간마다 반복되는 것이지만 약간의 시간 지연이 발생하더라도 관계없이 해당 사이클 시간을 소요한다. 그러나 주기(period)는 사이클 시간과 유사하지만 시간지연이 발생하면 다음에는 지연 시간만큼 감소하여 관련 프로세스/스레드의 수행 시간을 관리한다.
예를 들면 사이클 시간과 주기가 T라는 시간을 반복한다고 하면, 사이클 시간에서 해당 사이클에서 수행을 T+dT1만큼 수행되고 다음 사이클에서는 T-dt1만큼 수행되었다면 3번째 cycle의 시작 시간은 2T+dt1이 되어 실제로 2T 시각에 3번째 cycle이 실행되지 않을 수 있다.
그러나 주기의 경우, 해당 주기에서 T+dT1만큼 수행되었다면 다음 주기에서는 T-dT1보다 작게 수행되어 3번째 사이클의 시작 시간은 2T 가 되어 주기를 지킬 수 있다. 이렇게 사이클에서는 수행 시간의 오버 타임(over time)이 누적되어 전체적으로 보면 많은 사이클들이 사라져 실제로 시스템 제어에 있어서 문제가 될 수 있다. 그러나 주기는 해당 주기를 엄격하게 유지하므로 주기가 사라지는 것은 없다.
대부분의 로봇 SW들은 주기적으로 동작하면서 이벤트에 따라 관련된 동작을 처리하게 해야 하는데, 이러한 작업들을 로봇 미들웨어에서 해주면 사용자들이 매우 편리하게 SW 모듈들을 활용할 수 있다.
산업용 로봇에 활용되는 미들웨어로 ROS(Robot Operating System)가 산업용 로봇에 맞게 적용되었으며, OPRoS(Open Platform for Robotic Services)와 openRTM(open Robot Technology Middleware)도 산업용 로봇에 적용되었다.
그러나 이러한 미들웨어들은 앞에서 언급한 주기성과 이벤트 처리 문제들 외에 다른 문제들이 존재한다. ROS는 주기 프로세스의 경우에 주기에 해당 프로세스 실행시간을 빼고 남은 시간 동안 슬립하는 형태로 수행되고 있고, OPRoS와 openRTM도 유사한 방법을 사용하고 있다.
그리고 주기에 사용되는 SW 모듈은 ROS는 프로세스를, OPRoS와 openRTM은 스레드를 사용한다. 즉 로봇 SW 모듈로는 프로세스와 스레드(thread) 형이 사용될 수 있기 때문에 스케줄러는 프로세스형과 스레드형의 SW 모듈을 지원해야 한다. 그러나 현 로봇 미들웨어는 프로세스와 스레드를 동시에 지원하지 못하는 단점이 있다.
실제로 프로세스 형은 사용자 관점에서 사용하기가 편하고 스레드는 데이터의 관리와 프로세스보다는 실행시간 오버헤드가 적다는 장점이 있다. 그러나 스레드는 오류가 생기면 관련 스레드를 모두 중지시켜야 하는 단점이 있지만 프로세스는 그 프로세스만 중지시킬 수 있다. 따라서 해당 응용에 따라 알맞게 혼합하여 사용하면 편리하다. 특히 프로세스 형은 레가시(legacy) SW를 동작시킬 수 있기 때문에 더 유용하다.
스레드 형은 하나의 동작 스레드가 관련된 SW 모듈의 함수를 호출하여 수행하는 형태를 말한다. 즉 SW 모듈이 개별적으로 스레드가 되어 동작되지 않는다. 이 경우, 스레드를 만들고 스레드간 스위칭하는데 오버헤드가 존재할 수 있다. 실제로 많은 상용을 포함한 실시간 운영체제에서 엄격한 주기적(periodic) 수행과 스포라딕 수행을 할 수 있도록 하였다.
실제로 이러한 동작들을 원하는 형태는 프로세스 형(process type)과 스레드 형(thread type)의 2가지 종류가 존재한다. 일반 운영체제에서는 프로세스와 스레드 형 2개를 동시에 지원하지만 실시간성을 지원하지 않는 단점이 있다. 제노마이(Xenomai)와 QNX와 같은 실시간 운영체제는 스레드 형만을 지원하고 있다.
즉, 대부분의 실시간 운영체제는 주기성을 엄격하게 맞추기 위하여 주기성과 스포라딕 성질을 가진 프로세스 형을 지원하지 않고 있다. 또한 다른 문제는 스레드 형을 지원하더라도 사용하는 API가 다르기 때문에 소프트웨어의 이식성이 거의 없다. 예를 들면 제노마이 혹은 QNX에서 개발한 SW 들을 QNX혹은 제노마이로 각각 이식하기 위해서 표준 인터페이스인POSIX를 사용하더라도 해당 운영체제의 특별한 기능과 관련된 프로그램 내용(OS와의 연결부분)을 모두 수정하여야 하는 단점이 존재한다.
따라서 이러한 단점을 보완하기 위하여 미들웨어를 사용하고 있지만 현존하는 미들웨어는 이식성을 높이기 위하여 주기성보다는 순환성을 중심으로 동작하고 있고, 프로세스 혹은 스레드 한 종류만 지원하고 있으며 스포라딕 이벤트 처리도 많이 약하다. 사실 주기성은 타이머와 연결되어 있고, 순환성은 운영체제의 기본인 슬립(sleep) 혹은 웨이커업(wake up)기능을 활용하고 있기 때문에 이식성이 좋은 면이 있다.
실제로 산업용 시스템에서는 엄격한 주기적 실행(periodic execution)와 스포라딕 이벤트(sporadic event)를 많이 활용하고 있기 때문에 이를 대응해야 하며, 응용에 따라서는 스레드와 프로세스 형을 동시에 혹은 한 형태로 사용할 수 있으며, 다양한 운영체제를 지원하여 소프트웨어들의 이식성을 보장하여야 하지만, 이러한 요구조건들을 완전히 제공하여 주는 미들웨어 혹은 운영 체제가 없다.
제노마이와 QNX는 스레드를 주기성과 같이 실시간성을 지원하지만 프로세스를 지원하지 못하지만 리눅스와 윈도우는 프로세스와 스레드를 모두 지원하지만 실시간성을 지원하지 못하는 단점이 있다. 그리고 직접적으로 운영체제를 활용하는 경우에는 사용하는 API가 달라서 다른 운영체제로 이식할 때는 관련 모든 내용을 변경해야 하는 단점이 있다.
따라서 이러한 단점을 없애기 위해서 가능한 많은 부분을 변경하지 않도록 하면서 주기성과 스포라딕 이벤트를 처리하는 프로세스 형과 스레드 형을 동시에 지원하여 주며 실시간 운영체제 혹은 운영체제의 종류에 관계없이 동작할 수 있는 미들웨어용 스케쥴러가 필요하다.
실시예들은 산업용 로봇 시스템을 제어하기 위해 실시간으로 스케줄링하는 기술을 제공할 수 있다.
일 실시예에 따른 실시간 스케줄링 방법은, 실시간 스케줄링에 있어서, 프로세스 및 스레드에 대한 정보를 수신하는 단계와, 상기 정보를 이용하여 모듈 파일(module file)을 생성하는 단계와, 상기 모듈 파일로부터 상기 정보를 추출하여 스케줄링 테이블을 생성하는 단계와, 상기 스케줄링 테이블에 기초하여 상기 프로세스 및 상기 스레드를 실행하는 단계를 포함한다.
상기 모듈 파일은 복수의 모듈을 포함하고, 각각의 모듈은 모듈의 유형에 관한 정보, 모듈의 실행 유형에 관한 정보, 주기 정보, 데드라인(deadline) 정보 및 우선 순위 정보 중 적어도 하나의 정보를 포함할 수 있다.
상기 모듈의 유형은, 프로세스 유형 및 스레드 유형을 포함할 수 있다.
상기 모듈의 실행 유형은, 주기(periodic) 실행 유형, 스포라딕(sporadic) 실행 유형 및 비실시간(non-real time) 실행 유형을 포함할 수 있다.
상기 스케줄링 테이블을 생성하는 단계는, 상기 복수의 모듈을 이용하여 주기 실행을 위한 스케줄링 테이블을 생성하는 단계와, 상기 복수의 모듈을 이용하여 스포라딕 실행을 위한 스케줄링 테이블을 생성하는 단계를 포함할 수 있다.
상기 실행하는 단계는, 상기 실행 유형이 상기 비실시간 실행 유형인 모듈을 실행하는 단계와, 상기 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계와, 상기 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계를 포함할 수 있다.
상기 실행하는 단계는, 상기 프로세스 및 상기 스레드의 실행 주기의 최소 공배수인 매크로 주기(macro period)를 계산하는 단계를 더 포함할 수 있다.
상기 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계는, 상기 모듈의 유형이 상기 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하는 단계와, 상기 모듈의 유형이 상기 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보내는 단계를 포함할 수 있다.
상기 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계는, 상기 모듈의 컨디션(condition)을 판별하는 단계와, 상기 컨디션에 기초하여 상기 모듈을 실행하는 단계를 포함할 수 있다.
상기 모듈을 실행하는 단계는, 상기 모듈의 유형이 상기 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하는 단계와, 상기 모듈의 유형이 상기 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보내는 단계를 포함할 수 있다.
일 실시예에 따른 실시간 스케줄링 장치는, 실시간 스케줄링에 있어서, 프로세스 및 스레드에 대한 정보를 수신하는 수신기와, 상기 프로세스 및 상기 스레드에 대한 정보에 기초한 스케줄링 테이블을 이용하여 상기 프로세스 및 상기 스레드를 실행하는 컨트롤러를 포함하고, 상기 컨트롤러는, 상기 정보를 이용하여 모듈 파일(module file)을 생성하는 모듈 파일 생성기와, 상기 모듈 파일로부터 상기 정보를 추출하여 스케줄링 테이블을 생성하는 스케줄링 테이블 생성기와, 상기 스케줄링 테이블에 기초하여 상기 프로세스 및 상기 스레드를 실행하는 실행기를 포함한다.
상기 모듈 파일은 복수의 모듈을 포함하고, 각각의 모듈은 모듈의 유형에 관한 정보, 모듈의 실행 유형에 관한 정보, 주기 정보, 데드라인(deadline) 정보 및 우선 순위 정보 중 적어도 하나의 정보를 포함할 수 있다.
상기 모듈의 유형은, 프로세스 유형 및 스레드 유형을 포함할 수 있다.
상기 모듈의 실행 유형은, 주기(periodic) 실행 유형, 스포라딕(sporadic) 실행 유형 및 비실시간(non-real time) 실행 유형을 포함할 수 있다.
상기 스케줄링 테이블 생성기는, 상기 복수의 모듈을 이용하여 주기 실행을 위한 스케줄링 테이블을 생성하고, 상기 복수의 모듈을 이용하여 스포라딕 실행을 위한 스케줄링 테이블을 생성할 수 있다.
상기 실행기는, 상기 실행 유형이 상기 비실시간 실행 유형인 모듈을 실행하는 비실시간 실행기와, 상기 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 주기 실행기와, 상기 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 스포라딕 실행기를 포함할 수 있다.
상기 실행기는, 상기 프로세스 및 상기 스레드의 실행 주기의 최소 공배수인 매크로 주기(macro period)를 계산할 수 있다.
상기 주기 실행기는, 상기 모듈의 유형이 상기 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하고, 상기 모듈의 유형이 상기 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보낼 수 있다.
상기 스포라딕 실행기는, 상기 모듈의 컨디션(condition)을 판별하고, 상기 컨디션에 기초하여 상기 모듈을 실행할 수 있다.
상기 스포라딕 실행기는, 상기 모듈의 유형이 상기 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하고, 상기 모듈의 유형이 상기 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보낼 수 있다.
도 1은 일 실시예에 따른 실시간 스케줄링 장치의 개략적인 블록도를 나타낸다.
도 2는 도 1에 도시된 컨트롤러의 개략적인 블록도를 나타낸다.
도 3은 도 2에 도시된 모듈 파일 생성기가 생성한 모듈 파일의 예를 나타낸다.
도 4a는 도 2에 도시된 스케줄링 테이블 생성기가 생성한 주기 실행을 위한 스케줄링 테이블의 예를 나타낸다.
도 4b는 도 2에 도시된 스케줄링 테이블 생성기가 생성한 스포라딕 실행을 위한 스케줄링 테이블의 예를 나타낸다.
도 5는 도 2에 도시된 실행기의 개략적인 블록도를 나타낸다.
도 6은 도 2에 도시된 실행기의 알고리즘의 예를 나타낸다.
도 7a는 도 2에 도시된 실행기가 매크로 주기를 계산하는 동작의 예를 나타낸다.
도 7b는 도 7a에 기초한 주기 실행 테이블의 예를 나타낸다.
도 8은 스레드 유형 주기 모듈의 구조의 예를 나타낸다.
도 9는 프로세스 유형 주기 모듈의 구조의 예를 나타낸다.
도 10은 스레드 유형 스포라딕 모듈의 구조의 예를 나타낸다.
도 11은 프로세스 유형 스포라딕 모듈의 구조의 예를 나타낸다.
도 12는 도 1에 도시된 실시간 스케줄링 장치에 의한 타이밍 다이어그램의 예를 나타낸다.
도 13은 도 5에 도시된 주기 실행기 및 스포라딕 실행기의 동작의 예를 나타낸다.
도 14a는 도 1에 도시된 실시간 스케줄링 장치의 성능의 일 예를 나타낸다.
도 14b는 도 1에 도시된 실시간 스케줄링 장치의 성능의 다른 예를 나타낸다.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 그러나, 실시예들에는 다양한 변경이 가해질 수 있어서 특허출원의 권리 범위가 이러한 실시예들에 의해 제한되거나 한정되는 것은 아니다. 실시예들에 대한 모든 변경, 균등물 내지 대체물이 권리 범위에 포함되는 것으로 이해되어야 한다.
실시예에서 사용한 용어는 단지 설명을 목적으로 사용된 것으로, 한정하려는 의도로 해석되어서는 안된다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
제1 또는 제2등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 구성요소들은 용어들에 의해서 한정되어서는 안 된다. 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만, 예를 들어 실시예의 개념에 따른 권리 범위로부터 이탈되지 않은 채, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 실시예의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
본 명세서에서의 모듈(module)은 본 명세서에서 설명되는 각 명칭에 따른 기능과 동작을 수행할 수 있는 하드웨어를 의미할 수도 있고, 특정 기능과 동작을 수행할 수 있는 컴퓨터 프로그램 코드를 의미할 수도 있고, 또는 특정 기능과 동작을 수행시킬 수 있는 컴퓨터 프로그램 코드가 탑재된 전자적 기록 매체, 예를 들어 프로세서 또는 마이크로 프로세서를 의미할 수 있다.
다시 말해, 모듈이란 본 발명의 기술적 사상을 수행하기 위한 하드웨어 및/또는 상기 하드웨어를 구동하기 위한 소프트웨어의 기능적 및/또는 구조적 결합을 의미할 수 있다.
도 1은 일 실시예에 따른 실시간 스케줄링 장치의 개략적인 블록도를 나타낸다.
도 1을 참조하면, 실시간 스케줄링 장치(10)는 프로세스(process) 유형 및 스레드(thread) 유형을 포함하는 작업(task)에 대한 스케줄링을 수행할 수 있다. 실시간 스케줄링 장치(10)는 작업에 대하여 하드웨어 자원을 적절히 배정함으로써 컴퓨팅 시스템의 성능을 향상시킬 수 있다.
실시간 스케줄링 장치(10)는 스레드 유형과 프로세스 유형의 작업을 동시에 지원하는 실시간 스케줄링을 수행할 수 있다. 실시간 스케줄링 장치(10)는 엄격한 주기(period)를 지키면서 프로세스와 스레드를 동작시키고, 이벤트 발생을 검사(또는 판별)하여 이벤트를 스포라딕 유형으로 처리할 수 있다.
실시간 스케줄링 장치(10)는 엄격하게 주기 실행을 하면서 실시간 스포라딕 실행을 처리할 수 있다. 즉, 실시간 스케줄링 장치(10)는 SW(Software) 모듈의 프로세스 유형과 스레드 유형을 주기에 따라 엄격하게 관리할 수 있다.
실시간 스케줄링 장치(10)는 이벤트 검사 여부에 기초하여 프로세스 또는 스레드를 실시간으로 처리할 수 있다.
실시간 스케줄링 장치(10)는 주기적(periodic) 실행, 스포라딕(sporadic) 실행, 비실시간(non-real time) 실행을 처리할 수 있다. 실시간 스케줄링 장치(10)는 비실시간 실행을 처리하지 않고 운영체제의 기능에 맡길 수 있다.
실시간 스케줄링 장치(10)는 다양한 운영 체제에서 스케줄링을 실행할 수 있다. 예를 들어, 실시간 스케줄링 장치(10)는 Xenomai 실시간 운영 시스템 및 Linux에서스케줄링을 실행할 수 있다.
실시간 스케줄링 장치(10)는 레거시(legacy) SW(Software)를 처리할 수 있다. 실시간 스케줄링 장치(10)는 레거시 SW를 프로세스로 처리하며, 주기적 실행과 비실시간 실행을 처리할 수 있다.
실시간 스케줄링 장치(10)는 스포라딕 실행을 이벤트에 의해 시작시킬 수 있다. 실시간 스케줄링 장치(10)는 주기적 실행을 스레드와 프로세스로 구분하며, 이들에 대한 정보를 수신할 수 있다.
실시간 스케줄링 장치(10)는 이벤트와 관련된 컨디션 함수와 트리거링 함수를 등록할 수 있다. 실시간 스케줄링 장치(10)는 컨디션 함수의 해당 컨디션이 만족되를 판별하여, 해당 컨디션을 만족하면 관련 트리거링 함수를 스레드 유형으로 수행할 수 있다.
실시간 스케줄링 장치(10)의 스케줄링에 있어서, 주기 실행이 우선 순위가 가장 높으며, 스포라딕 실행이 다음으로 높을 수 있다.
주기 실행 프로세스와 스레드 간에도 우선 순위가 존재할 수 있고, 스포라딕 실행 스레드와 프로세스 간에도 우선 순위가 존재할 수 있다.
실시간 스케줄링 장치(10)는 스포라딕 실행을 위한 이벤트 확인 스레드를 포함할 수 있다. 실시간 스케줄링 장치(10)는 이벤트 확인 스레드를 주기적으로 실행하고, 이벤트 확인 주기는 디폴트(default)로 기본 주기(basic period) 동일하거나 상이하게 설정될 수 있다.
실시간 스케줄링 장치(10)는 수신기(100) 및 컨트롤러(200)를 포함한다.
수신기(100)는 프로세스 및 스레드에 대한 정보를 수신할 수 있다. 정보는 파일을 포함할 수 있다. 수신기(100)는 정보를 읽음으로써 정보를 수신할 수 있다. 예를 들어, 수신기(100)는 파일을 직접 읽을 수 있고, 외부로부터 통신 수단을 통하여 관련 정보를 얻을 수 있다. 수신기(100)는 프로세스 및 스레드에 대한 정보를 컨트롤러(200)로 출력할 수 있다.
컨트롤러(200)는 프로세스 및 스레드에 대한 정보에 기초한 스케줄링 테이블을 이용하여 프로세스 및 스레드를 실행할 수 있다.
도 2는 도 1에 도시된 컨트롤러의 개략적인 블록도를 나타낸다.
도 2를 참조하면, 컨트롤러(200)는 모듈 파일(module file) 생성기(210), 스케줄링 테이블 생성기(230) 및 실행기(250)를 포함할 수 있다.
모듈 파일 생성기(210)는 프로세스 및 스레드에 대한 정보를 이용하여 모듈 파일을 생성할 수 있다. 모듈 파일 생성기(210)는 생성한 모듈 파일을 스케줄링 테이블 생성기(230)로 출력할 수 있다. 모듈 파일 생성기(210)의 동작은 도 3을 참조하여 상세하게 설명할 것이다.
스케줄링 테이블 생성기(230)는 모듈 파일로부터 프로세스 및 스레드에 대한 정보를 추출하여 스케줄링 테이블(scheduling table)을 생성할 수 있다. 스케줄링 테이블 생성기(230)의 동작은 도 4a 및 4b를 참조하여 상세하게 설명할 것이다.
실행기(250)는 스케줄링 테이블에 기초하여 프로세스 및 스레드를 실행할 수 있다. 또한, 실행기(250)는 프로세스 및 스레드의 실행 주기의 최소 공배수인 매크로 주기(macro period)를 계산할 수 있다. 실행기(250)의 동작은 도 5 내지 도 11을 참조하여 자세하게 설명할 것이다.
도 3은 도 2에 도시된 모듈 파일 생성기가 생성한 모듈 파일의 예를 나타낸다.
도 3을 참조하면, 모듈 파일 생성기(210)는 프로세스 및 스레드의 정보에 기초하여 모듈 파일을 생성할 수 있다. 모듈 파일은 복수의 모듈을 포함할 수 있다. 예를 들어, 모듈 파일은 .xml의 형태를 가질 수 있다. 도 3의 예시와 같이 모듈 파일은 module.xml 파일로 제공될 수 있다.
각각의 모듈은 모듈의 유형(type)에 관한 정보, 모듈의 실행 유형에 관한 정보, 주기 정보, 데드라인(deadline) 정보 및 우선 순위 정보 중 적어도 하나의 정보를 포함할 수 있다.
모듈의 유형은 프로세스 유형 및 스레드 유형을 포함할 수 있다. 모듈의 실행 유형은 주기(periodic) 실행 유형, 스포라딕(sporadic) 실행 유형 및 비실시간(non-real time) 실행 유형을 포함할 수 있다.
스레드 유형은 Linux에서 .so 형으로 제공될 수 있고, 프로세스 유형은 실행 파일로 제공될 수 있다. 또한, 레거시(legacy) SW도 실행 파일로 제공될 수 있다.
도 4a는 도 2에 도시된 스케줄링 테이블 생성기가 생성한 주기 실행을 위한 스케줄링 테이블의 예를 나타내고, 도 4b는 도 2에 도시된 스케줄링 테이블 생성기가 생성한 스포라딕 실행을 위한 스케줄링 테이블의 예를 나타낸다.
도 4a 및 도 4b를 참조하면, 스케줄링 테이블 생성기(230)는 복수의 모듈을 이용하여 주기 실행을 위한 스케줄링 테이블을 생성할 수 있다. 스케줄링 테이블 생성기(230)는 복수의 모듈을 이용하여 스포라딕 실행을 위한 스케줄링 테이블을 생성할 수 있다. 스케줄링 테이블은 산업용 로봇을 위한 실시간 스케줄링 알고리즘에 사용될 수 있다.
도 4a에 나타난 [0], [1] 및 [2]는 스케줄링 테이블의 인덱스를 의미할 수 있다. 도 4a의 [0]은 100 ms의 .so 형을 의미하고, [1] 및 [2]는 각각 주기 200 ms, 400 ms의 프로세스 형을 의미할 수 있다.
스케줄링 테이블 생성기(230)는 주기에 따라 복수의 행(row)으로 이루어진 스케줄링 테이블을 생성할 수 있다. 예를 들어, 스케줄링 테이블 생성기(230)는 도 4a의 예시와 같이 각 주기에 따라 4 개의 행(row)을 생성할 수 있다.
스케줄링 테이블 생성기(230)는 생성한 스케줄링 테이블을 실행기(250)로 출력할 수 있다.
이하에서, 도 5 내지 도 11을 참조하여 실행기(250)의 동작을 자세하게 설명할 것이다.
도 5는 도 2에 도시된 실행기의 개략적인 블록도를 나타낸다.
도 5를 참조하면, 실행기(250)는 비실시간 실행기(251), 주기 실행기(253) 및 스포라딕 실행기(255)를 포함할 수 있다.
비실시간 실행기(251)는 실행 유형이 비실시간 실행 유형인 모듈을 실행할 수 있다. 주기 실행기(253)는 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행할 수 있다. 스포라딕 실행기(255)는 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행할 수 있다.
주기 실행기(253)는 모듈의 유형이 스레드 유형인 경우에 스레드의 실행을 위해 실행 함수를 호출할 수 있다. 주기 실행기(253)는 모듈의 유형이 프로세스 유형인 경우에 프로세스의 실행을 위해 신호(signal)을 보낼 수 있다.
스포라딕 실행기(255)는 모듈의 컨디션(condition)을 판별하고, 컨디션에 기초하여 모듈을 실행할 수 있다. 스포라딕 실행기(255)는 모듈의 유형이 스레드 유형인 경우에 스레드의 실행을 위해 실행 함수를 호출할 수 있다. 스포라딕 실행기(255)는 모듈의 유형이 프로세스 유형인 경우에 프로세스의 실행을 위해 신호(signal)를 보낼 수 있다.
도 6은 도 2에 도시된 실행기의 알고리즘의 예를 나타낸다.
도 6을 참조하면, 실행기(250)는 매크로 주기를 계산할 수 있다. 그 후, 비실시간 실행기(251)는 스케줄러를 실행시키면서 비실시간 모듈들을 실행시킬 수 있다. 즉, 실행기(250)는 비실시간 모듈들의 실행을 일반적인 실시간 스케줄러가 담당하게 할 수 있지만, 실시간 스케줄러의 부담을 줄여주기 위해 비실시간 모듈들의 실행을 관리하지 않을 수 있다.
이 경우에는 비실시간 실행기(251)는 주기 실행과 스포라딕 실행을 모두 수행한 후 시간이 남는 경우에만 서비스를 수행할 수 있다.
비실시간 실행기(250)는 비실시간 실행의 우선 순위를 낮게 설정한 후, 주기 실행기(253)는 주기 실행을 위한 스케줄링 테이블에 기초하여 스레드 유형 및 프로세스 유형의 모듈을 실행할 수 있다. 주기 실행기(253)의 동작은 도 8 및 도 9를 참조하여 더 자세하게 설명할 것이다.
그 후, 스포라딕 실행기(255)는 스포라딕 실행을 위한 스케줄링 테이블에 기초하여 스레드 유형 및 프로세스 유형의 모듈을 실행할 수 있다. 스포라딕 실행기(255)의 동작은 도 10 및 도 11을 참조하여 더 자세하게 설명할 것이다.
도 7a는 도 2에 도시된 실행기가 매크로 주기를 계산하는 동작의 예를 나타내고, 도 7b는 도 7a에 기초한 주기 실행 테이블의 예를 나타낸다.
도 7a 및 7b를 참조하면, 실행기(250)는 프로세스 및 상기 스레드의 실행 주기의 최소 공배수인 매크로 주기(macro period)를 계산할 수 있다. 산업용 로봇(Industrial robot)은 주기 실행을 기본적으로 동작할 수 있다. 필요한 기능들을 주기적으로 실행해야 하는 기능들의 수행 주기가 서로 다르기 때문에 실행기(250)는 이 주기들을 맞추어 줄 수 있다.
예를 들어, 도 7a의 예시에서 10ms, 20ms, 30ms의 주기로 실행되는 프로세스가 존재하고, 이를 각각 프로세스 A, B, C로 나타낼 수 있다.
실행기(250)는 이 프로세스들의 최대공약수인 10ms를 기본 주기(basic period)로 해당 프로세스들을 수행시킬 수 있다. 또한, 실행기(250)는 이 프로세스들의 실행 주기의 최소 공배수인 60ms마다 같은 내용이 반복되게 동작시킬 수 있다. 이 최소 공배수의 주기는 매크로 주기를 의미할 수 있다.
도 8은 스레드 유형 주기 모듈의 구조의 예를 나타내고, 도 9는 프로세스 유형 주기 모듈의 구조의 예를 나타낸다.
도 8 및 도 9를 참조하면, 주기 실행기(253)는 스레드 유형의 주기 모듈 및 프로세스 유형의 주기 모듈을 실행할 수 있다. 주기 실행기(253)는 스레드 유형의 주기 모듈과 프로세스 유형의 주기 모듈을 상이한 방법으로 제어할 수 있다.
주기 실행기(253)는 스레드 유형을 .so 파일의 run() 함수를 호출하여 수행하지만, 프로세스 형은 스케줄러와 독립적인 프로세스이기 때문에 신호(signal)로 제어할 수 있다.
만일 해당 주기에 여러 개의 .so 파일이 수행된다면 주기 실행기(253)는 해당 .so 파일들의 run() 함수들을 모두 호출할 수 있다. 이러한 방법을 통해 주기 실행기(253)는 스레드 또는 프로세스를 제어할 때 필요한 오버헤드 시간을 줄일 수 있다.
주기 실행기(253)는 run() 함수를 수행하기 위해서는 초기화 등의 과정을 선행적으로 수행할 수 있다. 이를 위한 .so 파일의 구조는 도 8의 예시와 같을 수 있다. 주기 실행기(253)는 초기화 과정은 initialize()를 통해 수행하고, start() 함수를 통해 실제 run()이 수행되기 전에 필요한 작업들을 수행할 수 있다.
주기 실행기(253)는.so 파일의 수행을 멈추고 싶을 때 stop() 함수를 호출하고, 완전히 종료하고자 할 때는 destroy()를 호출할 수 있다. 또한, 주기 실행기(253)는 오류가 생길 경우 error() 를 호출하여 해당 오류를 처리할 수 있다.
주기 실행기(253)는 신호(signal)를 사용하여 프로세스 유형의 모듈을 제어할 수 있다. 주기 실행기(253)가 제어하는 프로세스 유형의 구조는 도 9와 같을 수 있다.
주기 실행기(253)는 initPeriodExe() 함수를 통해 레거시 모듈이 스케줄러의 관리하에 있을 수 있도록 초기 설정을 할 수 있다. 주기 실행기(253)는 이 함수를 통해 모듈이 스케줄러에 의해 보내진 신호를 처리하도록 하기 위해 스케줄러에 신호를 등록할 수 있다.
주기 실행기(253)는 waitPeriod() 함수를 이용해 모듈이 자신의 실행 순서가 아닐 경우 대기하게 할 수 있다. 주기 실행기(253)는 스케줄러가 신호를 보내면 대기 상태에서 벗어나 한 주기를 실행하고 다시 대기상태에 들어가면서 스케줄러의 신호를 받을 때마다 반복적으로 주기 수행을 할 수 있다.
주기 실행기(253)는 신호의 순서를 제어하고 프로세스에 우선순위를 부여함으로써 해당 프로세스들의 실행 순서를 제어할 수 있다.
도 10은 스레드 유형 스포라딕 모듈의 구조의 예를 나타내고, 도 11은 프로세스 유형 스포라딕 모듈의 구조의 예를 나타낸다.
도 10 및 도 11을 참조하면, 스포라딕 실행기(255)는 주기 모듈의 실행이 전부 완료된 후, 스포라딕 모듈의 이벤트(event) 발생여부를 확인할 수 있다. 스포라딕 실행기(255)는 이벤트를 발생에 관한 .so를 확인하여 EDF(Earliest Deadline First) 또는 RM(Rate Monotonic) 방법을 사용하여 데드라인(deadline)이 가장 짧은 스포라딕 모듈부터 실행시킬 수 있다.
스포라딕 실행기(255)는 프로세스 유형에 대해서도 이벤트를 확인할 수 있다. 다만, 스포라딕 실행기(255)는 프로세스에 대해 제어권을 확보하기가 힘들어서 데드라인에 기반한 스케줄링 어려울 수 있다.
즉 데드라인에 따른 스케쥴링은 .so 유형에서만 가능할 수 있다. 그러나, 스포라딕 실행기(255)는 프로세스 유형도 조건이 만족하면 스포라딕 동작을 실행할 수 있다.
스포라딕 실행기(255)는 condition() 함수에 의해 이벤트 발생 여부를 확인할 수 있다. 스포라딕 실행기(255)는 condition() 함수의 리턴 값이 TRUE이면 이벤트가 발생한 것으로 판별하여 .so 혹은 프로세스를 등록하여 데드라인을 확인할 수 있다.
스포라딕 실행기(255)가 스레드 유형 및 프로세스 유형의 모듈을 실행하는 동작은 상술한 주기 실행기(255)에서의 동작과 동일할 수 있다.
도 12는 도 1에 도시된 실시간 스케줄링 장치에 의한 타이밍 다이어그램의 예를 나타내고, 도 13은 도 5에 도시된 주기 실행기 및 스포라딕 실행기의 동작의 예를 나타낸다.
도 12 및 도 13을 참조하면, 실행기(253)는 스케줄링 테이블의 각 행에 나열된 모듈들을 각 주기에 따라 순차적으로 실행할 수 있다. 주기 실행기(253)는 우선적으로 주기 모듈을 실행하고, 스포라딕 실행에 대한 모듈의 컨디션(또는 이벤트 컨디션)을 판별할 수 있다.
그 후, 모듈의 컨디션 판별 결과에 기초하여 스포라딕 모듈을 실행할 수 있다. 그 후, 시간이 남으면 비실시간 모듈을 실행할 수 있다.
기본 주기만큼의 시간이 지나고 나면 실행기(250)는 상술한 동작을 반복적으로 실행할 수 있다.
주기 실행과 스포라딕 실행은 스레드 유형과 프로세스 유형의 2가지 유형을 포함할 수 있다. 실행 유형에 따라 실행기(250)는 스케줄러의 제어 방식을 변형시킬 수 있다.
주기 실행기(253)는 도 13의 예시와 같이, 주기 실행에 대한 스레드 유형(.so 유형) 모듈의 스레드를 실행하기 위해 실행함수를 호출하고, 주기 프로세스 유형의 경우, 프로세스의 실행을 위해 신호를 보낼 수 있다.
스포라딕 실행기(255) 모듈의 컨디션을 판별하여 스레드 유형(.so) 및 프로세스 유형의 스포라딕 모듈을 실행할 수 있다. 그 후, 비실시간 실행기(251)는 비실시간 모듈을 실행할 수 있다.
도 14a는 도 1에 도시된 실시간 스케줄링 장치의 성능의 일 예를 나타내고, 도 14b는 도 1에 도시된 실시간 스케줄링 장치의 성능의 다른 예를 나타낸다.
도 14a 및 14b를 참조하면, 실시간 스케줄링 장치(10)의 성능이 검증될 수 있다.
실시간 스케줄링 장치(10)의 스케줄링 알고리즘의 유효성을 검증하기 위하여 아래와 같은 운영체제 및 사양의 PC(Personal Computer)에서 표 1과 같은 데이터를 사용하여 실험이 수행될 수 있다.
- Ubuntu 14.04 LTS,
- Xenomai-3.0.3
- CPU: Intel i5-2500, 3.3GHz, X86_64
No Number of
Periodic modules
Number of
Sporadic
modules
Number of Non- real-time
modules
Type of
measured
module
.so exe
1 1 0 0 0 thread
2 5 0 0 0 thread
3 9 0 0 0 thread
4 0 1 0 0 Process
5 0 5 0 0 Process
6 0 9 0 0 Process
7 4 5 0 0 Thread
8 9 9 5 1 Process
9 9 9 5 1 Thread
테스트는 주기 모듈들이 주기 수행에 얼마나 영향을 받는지에 관해 평가할 수 있다. 테스트를 통해, 주기 지터(jitter)에 관련된 통계가 측정될 수 있다.
실시간 스케줄링 장치(10)는 표 1의 주기 모듈, 스포라딕 모듈 및 비실시간 모듈을 사용하여 테스트를 수행할 수 있다. 표 1의 테스트 케이스들은 주기 300 us로 동작할 수 있다. 표 1의 Type of measured module은 지터를 측정하는 모듈이 스레드 유형(.so) 인지 프로세스 유형(exe) 형인지를 나타낼 수 있다.
표 1에 따른 수행 결과는 표 2와 같이 나타낼 수 있다.
No Jitter mean
(us)
Jitter variance
(us)
Jitter(%) mean*100 basic period Jitter 최악
(us)
Jitter (%)
최악*100
/주기
1 0.010 0.037 0.003% 4.4 1.5%
2 0.010 0.037 0.003% 2.3 0.76%
3 0.010 0.030 0.003% 26.30 8.78%
4 0.010 0.36 0.003% 7.50 2.5%
5 0.010 0.33 0.003% 8.21 2.7%
6 0.010 0.47 0.003% 28.10 9.4%
7 0.010 0.020 0.003% 4.59 1.5%
8 0.238 0.000 0.08% 25.709 8.57%
9 1.517 0.00526 0.50% 36.823 12.27%
도 14a 및 14b는 각각 테스트케이스 8과 9에 대한 지터 변화를 나타낼 수 있다. 표 2, 도 14a 및 14b를 참조하면, 가장 실행 횟수가 많은 테스트 케이스 9에서도 실시간 스케줄링 장치(10)가 거의 주기를 지키고 있음을 알 수 있다. 테스트 케이스 9의 경우에 최악 지터가 발생되는데, 최악임에도 불구하고 실제로 12.27% 정도의 지터가 발생함이 확인될 수 있다.
즉, 표 2는 실시간 스케줄링 장치(10)가 산업용 로봇의 제어에 효율적으로 활용될 수 있음을 보여 주고 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 청구범위의 범위에 속한다.

Claims (18)

  1. 실시간 스케줄링에 있어서,
    프로세스 및 스레드에 대한 정보를 수신하는 단계;
    상기 정보를 이용하여 모듈 파일(module file)을 생성하는 단계;
    상기 모듈 파일로부터 상기 정보를 추출하여 스케줄링 테이블을 생성하는 단계; 및
    상기 스케줄링 테이블에 기초하여 상기 프로세스 및 상기 스레드를 실행하는 단계
    를 포함하고,
    상기 모듈 파일은 모듈의 실행 유형에 관한 정보를 포함하고,
    상기 모듈의 실행 유형은 주기(periodic) 실행 유형, 스포라딕(sporadic) 실행 유형 및 비실시간(non-real time) 실행 유형을 포함하는
    실시간 스케줄링 방법.
  2. 제1항에 있어서,
    상기 모듈 파일은 복수의 모듈을 포함하고,
    각각의 모듈은 모듈의 유형에 관한 정보, 상기 모듈의 실행 유형에 관한 정보, 주기 정보, 데드라인(deadline) 정보 및 우선 순위 정보 중 적어도 하나의 정보를 포함하는
    실시간 스케줄링 방법.
  3. 제2항에 있어서,
    상기 모듈의 유형은,
    프로세스 유형 및 스레드 유형을 포함하는
    실시간 스케줄링 방법.
  4. 삭제
  5. 제2항에 있어서,
    상기 스케줄링 테이블을 생성하는 단계는,
    상기 복수의 모듈을 이용하여 주기 실행을 위한 스케줄링 테이블을 생성하는 단계; 및
    상기 복수의 모듈을 이용하여 스포라딕 실행을 위한 스케줄링 테이블을 생성하는 단계
    를 포함하는 실시간 스케줄링 방법.
  6. 제5항에 있어서,
    상기 실행하는 단계는,
    상기 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계;
    상기 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계; 및
    상기 실행 유형이 상기 비실시간 실행 유형인 모듈을 실행하는 단계
    를 포함하는 실시간 스케줄링 방법.
  7. 제6항에 있어서,
    상기 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계는,
    상기 모듈의 유형이 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하는 단계; 및
    상기 모듈의 유형이 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보내는 단계
    를 포함하는 실시간 스케줄링 방법.
  8. 제6항에 있어서,
    상기 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 단계는,
    상기 모듈의 컨디션(condition)을 판별하는 단계; 및
    상기 컨디션에 기초하여 상기 모듈을 실행하는 단계
    를 포함하는 실시간 스케줄링 방법.
  9. 제8항에 있어서,
    상기 컨디션에 기초하여 상기 모듈을 실행하는 단계는,
    상기 모듈의 유형이 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하는 단계; 및
    상기 모듈의 유형이 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보내는 단계
    를 포함하는 실시간 스케줄링 방법.
  10. 실시간 스케줄링에 있어서,
    프로세스 및 스레드에 대한 정보를 수신하는 수신기; 및
    상기 프로세스 및 상기 스레드에 대한 정보에 기초한 스케줄링 테이블을 이용하여 상기 프로세스 및 상기 스레드를 실행하는 컨트롤러
    를 포함하고,
    상기 컨트롤러는,
    상기 정보를 이용하여 모듈 파일(module file)을 생성하는 모듈 파일 생성기;
    상기 모듈 파일로부터 상기 정보를 추출하여 스케줄링 테이블을 생성하는 스케줄링 테이블 생성기; 및
    상기 스케줄링 테이블에 기초하여 상기 프로세스 및 상기 스레드를 실행하는 실행기
    를 포함하고,
    상기 모듈 파일은 모듈의 실행 유형에 관한 정보를 포함하고,
    상기 모듈의 실행 유형은 주기(periodic) 실행 유형, 스포라딕(sporadic) 실행 유형 및 비실시간(non-real time) 실행 유형을 포함하는
    실시간 스케줄링 장치.
  11. 제10항에 있어서,
    상기 모듈 파일은 복수의 모듈을 포함하고,
    각각의 모듈은 모듈의 유형에 관한 정보, 상기 모듈의 실행 유형에 관한 정보, 주기 정보, 데드라인(deadline) 정보 및 우선 순위 정보 중 적어도 하나의 정보를 포함하는
    실시간 스케줄링 장치.
  12. 제11항에 있어서,
    상기 모듈의 유형은,
    프로세스 유형 및 스레드 유형을 포함하는
    실시간 스케줄링 장치.
  13. 삭제
  14. 제11항에 있어서,
    상기 스케줄링 테이블 생성기는,
    상기 복수의 모듈을 이용하여 주기 실행을 위한 스케줄링 테이블을 생성하고, 상기 복수의 모듈을 이용하여 스포라딕 실행을 위한 스케줄링 테이블을 생성하는
    실시간 스케줄링 장치.
  15. 제14항에 있어서,
    상기 실행기는,
    상기 주기 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 주기 실행기;
    상기 스포라딕 실행을 위한 스케줄링 테이블로부터 모듈을 획득하여 실행하는 스포라딕 실행기; 및
    상기 실행 유형이 상기 비실시간 실행 유형인 모듈을 실행하는 비실시간 실행기
    를 포함하는 실시간 스케줄링 장치.
  16. 제15항에 있어서,
    상기 주기 실행기는,
    상기 모듈의 유형이 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하고, 상기 모듈의 유형이 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보내는
    실시간 스케줄링 장치.
  17. 제15항에 있어서,
    상기 스포라딕 실행기는,
    상기 모듈의 컨디션(condition)을 판별하고, 상기 컨디션에 기초하여 상기 모듈을 실행하는
    실시간 스케줄링 장치.
  18. 제17항에 있어서,
    상기 스포라딕 실행기는,
    상기 모듈의 유형이 스레드 유형인 경우에 상기 스레드의 실행을 위해 실행 함수를 호출하고, 상기 모듈의 유형이 프로세스 유형인 경우에 상기 프로세스의 실행을 위해 신호(signal)를 보내는
    실시간 스케줄링 장치.
KR1020180057344A 2018-05-18 2018-05-18 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치 KR102149171B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180057344A KR102149171B1 (ko) 2018-05-18 2018-05-18 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180057344A KR102149171B1 (ko) 2018-05-18 2018-05-18 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20190132097A KR20190132097A (ko) 2019-11-27
KR102149171B1 true KR102149171B1 (ko) 2020-08-28

Family

ID=68730077

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180057344A KR102149171B1 (ko) 2018-05-18 2018-05-18 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102149171B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102250716B1 (ko) * 2020-02-04 2021-05-11 선문대학교 산학협력단 블록체인 기반 스케줄링 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010044784A (ja) * 1998-11-09 2010-02-25 Intel Corp システムにおける要求のスケジューリング
KR101313692B1 (ko) * 2009-12-18 2013-10-02 한국전자통신연구원 로봇용 소프트웨어 컴포넌트를 실행하는데 있어서 고장 감내 방법 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010044784A (ja) * 1998-11-09 2010-02-25 Intel Corp システムにおける要求のスケジューリング
KR101313692B1 (ko) * 2009-12-18 2013-10-02 한국전자통신연구원 로봇용 소프트웨어 컴포넌트를 실행하는데 있어서 고장 감내 방법 및 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102250716B1 (ko) * 2020-02-04 2021-05-11 선문대학교 산학협력단 블록체인 기반 스케줄링 시스템

Also Published As

Publication number Publication date
KR20190132097A (ko) 2019-11-27

Similar Documents

Publication Publication Date Title
CN106293919B (zh) 一种时间触发的嵌入式任务调度装置与方法
JPWO2005106623A1 (ja) Cpuクロック制御装置、cpuクロック制御方法、cpuクロック制御プログラム、記録媒体、及び伝送媒体
US9396028B2 (en) Scheduling workloads and making provision decisions of computer resources in a computing environment
US20080201591A1 (en) Method and apparatus for dynamic voltage and frequency scaling
KR101551321B1 (ko) 휴대용 컴퓨팅 디바이스에서 요청들을 스케쥴링하기 위한 방법 및 시스템
US9417930B2 (en) Time slack application pipeline balancing for multi/many-core PLCs
Tang et al. Scheduling computation graphs of deep learning models on manycore cpus
US20030177163A1 (en) Microprocessor comprising load monitoring function
US20120324194A1 (en) Adjusting the amount of memory allocated to a call stack
KR102149171B1 (ko) 산업용 로봇 시스템의 실시간 스케줄링 방법 및 장치
CN110955503B (zh) 任务调度方法及装置
WO2015188016A2 (en) Energy-efficient real-time task scheduler
Cinque et al. Rpuguard: Real-time processing unit virtualization for mixed-criticality applications
EP3401784A1 (en) Multicore processing system
US20100325635A1 (en) Method for correct-by-construction development of real-time-systems
CN101349975B (zh) 一种在嵌入式操作系统上实现中断底半部机制的方法及装置
CN109426556B (zh) 一种进程调度方法和装置
KR101674324B1 (ko) 실시간 제어 응용에 적용되는 태스크 스케쥴링 장치 및 방법
Chen et al. Integrating I/O Time to Virtual Time System for High Fidelity Container-based Network Emulation
US10261817B2 (en) System on a chip and method for a controller supported virtual machine monitor
KR20190118521A (ko) 분산형 소프트웨어 컴포넌트들 간의 통신에서 오류 처리를 위한 방법 및 장치
US11112999B2 (en) Optimizing I/O latency by software stack latency reduction in a cooperative thread processing model
Babu et al. Mechanisms for precise virtual time advancement in network emulation
US20240211297A1 (en) Method for a primary virtual machine to schedule a task of sibling virtual machines
CN100370466C (zh) 逻辑电路仿真测试方法和系统

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant