1
2017 Final-term Examination (100)
Architecting Smart Devices
Date: 2017-12-14
1. Android에서 SensorManager를 통해 sensor 정보를 받을 때 event listener를 사용하
는 이유를 논리적으로 설명하시오. (20)
- Sensor 정보는 거의 연속적으로 계속 수신되기 때문에, broadcast receiver가 아닌
event listener가 적절하다.
- Sensor 정보는 범용 정보가 아니고 특별한 app만 필요로 하기 때문에, 전체 app에 공
지하는 broadcast receiver 방식은 맞지 않다. 따라서 특별한 message에 특화된 event
listener가 적절하다.
2. Hard RTOS가 사용되어야 하는 응용을 하나만 예로 들고, 구체적인 이유를 설명하라.
(20)
- Hard RTOS는 기준으로 잡은 연산 실행 시간을 넘어가면 정상 결과라 할지라도 모두
error로 간주한다. 이런 특정으로 인해 주어진 시간에 정확한 연산이 필요한 응용에 사
용된다.
- 원자력 발전소 제어기: 원자력 발전소의 sensor 정보는 지연되어서는 안되는 민감한
정보이므로 이를 처리하는 제어기의 OS는 RTOS로 설계한다. 제어기 RTOS는 주어진 시
간 안에 sensor 결과를 얻지 못하면 error로 간주하고 system 경보를 발생시킨다.
- 미사일 발사 장치: 미사일은 주어진 시간안에 정해진 절차를 거쳐 발사되므로 RTOS를
사용해야 한다. 만약 주어진 시간에 정보 처리를 못하여 발사 진행을 못한다면 폭발 부
담으로 인해 system을 정지시키고 경보를 발생시킨다.
3. Bluetooth를 “ad hoc piconet”으로 표현하기도 한다. 이를 구체적으로 설명하라. (20)
- Bluetooth는 network 구성을 미리 정하지 않고, 상황에 맞추어 network 구성을 변경
할 수 있다. 따라서 Bluetooth network은 “ad hoc”이란 특성을 가진다. 여기서 “ad hoc”
은 즉흥적이란 뜻이다.
- Bluetooth network은 최대 8개 device만으로 구성되어야 하므로 network의 크기가 크
2
지 않다. Network 분야에서는 매우 작은 network을 말할 때 piconet이란 용어를 사용하
므로 Bluetooth network은 piconet의 일종이다.
4. 다음을 Android code로 구현하라. Code는 짧을수록 가산점. (40)
 Service를 상속받아 만든 class PhoneStateService를 실행. Context는 MainActivity.this
로 가정. (10)
Intent intent = new Intent(MainActivity.this, PhoneStateService.class);
MainActivity.this.startService(intent);
 BluetoothAdapter를 생성하고, Bluetooth가 주변 검색(discovery) 중이라면 검색을 중
지한 후 검색을 실행. 검색 중이 아니면 바로 검색을 실행. (15)
BluetoothAdapter bthAdapter = BluetoothAdpater.getDefaultAdapter();
if (bthAdapter.isDiscovering()) bthAdapter.cancelDiscovery();
bthAdapter.startDiscovery();
 GPS를 이용한 위치 정보를 얻기 위해 LocationManager에 Event Listener를 등록.
Context는 MainActivity.this, Event Listener는 MyLocationListener로 가정, 나머지 필요
한 parameter는 임의로 설정. (15)
LocationManager locationManager =
MainActivity.this.getSystemService(Context.LOCATION_SERVICE);
MyLocationListener myLocationListener = new MyLocationListener();
long minTime = 1000;
float minDistance = 0;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime,
minDistance, myLocationListener);

TestSDS2017-2(answer)

  • 1.
    1 2017 Final-term Examination(100) Architecting Smart Devices Date: 2017-12-14 1. Android에서 SensorManager를 통해 sensor 정보를 받을 때 event listener를 사용하 는 이유를 논리적으로 설명하시오. (20) - Sensor 정보는 거의 연속적으로 계속 수신되기 때문에, broadcast receiver가 아닌 event listener가 적절하다. - Sensor 정보는 범용 정보가 아니고 특별한 app만 필요로 하기 때문에, 전체 app에 공 지하는 broadcast receiver 방식은 맞지 않다. 따라서 특별한 message에 특화된 event listener가 적절하다. 2. Hard RTOS가 사용되어야 하는 응용을 하나만 예로 들고, 구체적인 이유를 설명하라. (20) - Hard RTOS는 기준으로 잡은 연산 실행 시간을 넘어가면 정상 결과라 할지라도 모두 error로 간주한다. 이런 특정으로 인해 주어진 시간에 정확한 연산이 필요한 응용에 사 용된다. - 원자력 발전소 제어기: 원자력 발전소의 sensor 정보는 지연되어서는 안되는 민감한 정보이므로 이를 처리하는 제어기의 OS는 RTOS로 설계한다. 제어기 RTOS는 주어진 시 간 안에 sensor 결과를 얻지 못하면 error로 간주하고 system 경보를 발생시킨다. - 미사일 발사 장치: 미사일은 주어진 시간안에 정해진 절차를 거쳐 발사되므로 RTOS를 사용해야 한다. 만약 주어진 시간에 정보 처리를 못하여 발사 진행을 못한다면 폭발 부 담으로 인해 system을 정지시키고 경보를 발생시킨다. 3. Bluetooth를 “ad hoc piconet”으로 표현하기도 한다. 이를 구체적으로 설명하라. (20) - Bluetooth는 network 구성을 미리 정하지 않고, 상황에 맞추어 network 구성을 변경 할 수 있다. 따라서 Bluetooth network은 “ad hoc”이란 특성을 가진다. 여기서 “ad hoc” 은 즉흥적이란 뜻이다. - Bluetooth network은 최대 8개 device만으로 구성되어야 하므로 network의 크기가 크
  • 2.
    2 지 않다. Network분야에서는 매우 작은 network을 말할 때 piconet이란 용어를 사용하 므로 Bluetooth network은 piconet의 일종이다. 4. 다음을 Android code로 구현하라. Code는 짧을수록 가산점. (40)  Service를 상속받아 만든 class PhoneStateService를 실행. Context는 MainActivity.this 로 가정. (10) Intent intent = new Intent(MainActivity.this, PhoneStateService.class); MainActivity.this.startService(intent);  BluetoothAdapter를 생성하고, Bluetooth가 주변 검색(discovery) 중이라면 검색을 중 지한 후 검색을 실행. 검색 중이 아니면 바로 검색을 실행. (15) BluetoothAdapter bthAdapter = BluetoothAdpater.getDefaultAdapter(); if (bthAdapter.isDiscovering()) bthAdapter.cancelDiscovery(); bthAdapter.startDiscovery();  GPS를 이용한 위치 정보를 얻기 위해 LocationManager에 Event Listener를 등록. Context는 MainActivity.this, Event Listener는 MyLocationListener로 가정, 나머지 필요 한 parameter는 임의로 설정. (15) LocationManager locationManager = MainActivity.this.getSystemService(Context.LOCATION_SERVICE); MyLocationListener myLocationListener = new MyLocationListener(); long minTime = 1000; float minDistance = 0; locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, myLocationListener);