VPOS 를 구성하고 있는 각 함수들의 명세를 설명하고 있다. 소스코드를 이해하는 데 도움이 될 것으로 믿는다.
각 source file 별로 분류했으며, 명세의 형식은 '함수명, 인자, 기능' 으로 분류했다.

  1. Fs : FAT 파일 시스템(차후 지원 예정)
  2. Hal : 하드웨어 의존적인 코드들이 포함(부트로더, 하드웨어 초기화, CPU 메모리 맵등)
  3. Images : 컴파일 후에 오브젝트 파일들이 생성
  4. Include : 각 헤더 파일들
  5. Kernel : 커널의 핵심적인 부분을 가지고 있는 코드
  6. Lib : 라이브러리들(c 파일형태)
  7. Net : 차후 지원 예정
  8. Objs : .c 파일이 컴파일되면, .o 파일이 모두 저장됨
  9. Examples : 커널위에서 수행되는 예제 애플리케이션들
  10. Shell : vpsh 쉘 관련 코드

여기서는 hal, kernel, shell, example 에서의 함수들만 설명한다.

부트로더에 관련한 파일들이다.

OS 의 도움을 받아서 실행할 수 없기 때문에, 스스로 loading 하기 위해서 필요한 파일이다.

부트로더로서, 인터럽트 벡터 테이블을 정의하고 flash 에 저장되어 있는 커널을 메모리의 0x30000000 으로 복사한 뒤에, pc 를 0x30000000 으로 옮긴다.
하나의 .s 파일로 구성되어 있다.

cpu 에 의존적인 파일들이다.

부트로더에 의해서 메모리 0x30000000 으로 옮겨지면, 가장 먼저 수행되는 파일로서 하드웨어 초기화와 각 mode 에 대한 테스트를 한다.
수행 후에 마지막으로 c 코드 레벨인 kernel_start.c 파일의 vpos_kernel_main() 함수를 호출한다.

함수명 vk_swi_classifier
인자 unsigned thread
기능 쓰레드를 발생시킨, 소프트웨어 인터럽트(swi)가 발생하면 숫자를 통해 어떤 인터럽트인지 구분해서 각각 처리한다
함수명 vk_enable_interrupt
인자 void
기능 소프트 인터럽트 값(swi_number)에 EI(40) 을 입력하고, 소프트웨어 인터럽트를 발생시킨다
함수명 vk_disable_interrupt
인자 void
기능 소프트 인터럽트 값(swi_number)에 EI(41) 을 입력하고, 소프트웨어 인터럽트를 발생시킨다
함수명 vk_swi_scheduler
인자 void
기능 소프트 인터럽트 값(swi_number)에 EI(44) 을 입력하고, 소프트웨어 인터럽트를 발생시킨다
함수명 vk_save_thread_ctx
인자 vk_thread_t *thread
기능 소프트 인터럽트 값(swi_number)에 SC(42) 을 입력하고, 소프트웨어 인터럽트를 발생시킨다
함수명 vk_restore_thread_ctx
인자 vk_thread_t *thread
기능 소프트 인터럽트 값(swi_number)에 RC(43) 을 입력하고, 소프트웨어 인터럽트를 발생시킨다
함수명 vh_swi
인자 unsigned thread
기능 swi 0x00 소프트웨어 인터럽트를 발생시킨다
주의 사용하지 않음에도 불구하고, 인자값을 받는 이유는 단순히 현재 스레드(thread)의 주소를 넘겨주기 위함이다
함수명 vh_enable_interrupt
인자 vh_enable_interrupt
기능 인터럽트를 활성화 시킴, spsr 레지스터의 7,6 번 레지스트를 1로 세팅
함수명 vh_disable_interrupt
인자 vk_thread_t* thread
기능 인터럽트를 비활성화 시킴, spsr 레지스터의 7 번 레지스트를 1로 세팅

부트로더와 마찬가지로 혼자서 메모리 상에 loading 하기 위해서 필요한 파일이다.

하드웨어와 관련한 헤더파일들이다. 거의 대부분 CPU 의 데이터 시트를 보면, 알 수 있는 것들이다.

CPU(s3c2410) 에 의존적인 파일이다. 거의 대부분 데이터 시트에 정의되어 있는 것들이다.

외부 i/o 디바이스에 대한 주소값을 정의한다.

각 디바이스에 비트연산을 할 때, 용이하게 하기 위해서 정의한다.

커널의 핵심을 이루는 파일들이다.

배리어(barrier) 에 관련한 함수들을 포함하고 있다. 배리어는 쓰레드를 멈추게 하는 함수이다. 배리어는 특정한 수의 쓰레드가 배리어에 도착할 때까지 쓰레드를 멈추게 한다. 원하는 만큼의 쓰레드가 도달하면 모든 쓰레드가 다시 진행된다.

함수명 pthread_barrier_init
인자 pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned count(쓰레드 숫자와 waiter 배열을 가진 구조체와 속성 구조체, 총 쓰레드의 숫자)
기능 vk_barrier_t 구조체를 생성하고, 크기만큼 메모리를 할당 받는다. 여기서는 총 5개의 쓰레드를 배리어시킬 것이므로, waiter 배열을 초기화(NULL) 시킨다
함수명 pthread_barrier_destroy
인자 pthread_barrier_t *barrier
기능 스케줄러를 lock 시키고, waiter 배열을 초기화(NULL)시키고, 메모리를 반환(free) 하고, 다시 스케줄러를 unlock 한다
함수명 pthread_barrier_wait
인자 pthread_barrier_t *barrier
기능 스케줄러를 lock 시키고, 쓰레드가 수행된 순서대로 waiter 배열에 저장한다. 그리고 상태(state)를 SLEEP 로 변경하고, ready queue 에서 빼낸다. 스케줄러를 unlock 하고, vk_scheduler() 를 수행한다. waiter 배열의 순서대로 쓰레드의 상태를 READY 로 변경하고, 다시 ready queue 로 넣는다. 그리고 전에 저장되었던 waiter 배열에 NULL 값을 넣고, 스케줄러를 unlock 하고 vk_scheduler() 를 수행한다

example 의 cond_example 에서 사용하는 함수들을 포함하고 있다.

함수명 pthread_cond_init
인자 pthread_cond_t* cond, const pthread_condattr_t* attr
기능 조건 변수 cond 를 초기화 한다. attr 인자는 옵션이며, cond 의 속성을 명시한다
함수명 pthread_cond_destroy
인자 pthread_cond_t *cond
기능 더 이상 필요하지 않은 조건변수 cond 를 파괴한다. cond 는 더 이상 사용될 수 없다
함수명 pthread_cond_wait
인자 pthread_cond_t *cond, pthread_mutex_t *mu
기능 시그널이나 브로드캐스트에 의해 깨어날 때까지 조건변수 cond 에서 대기한다
함수명 pthread_cond_signal
인자 pthread_cond_t *cond
기능 조건변수 cond 로 시그널을 보내서, 대기 중인 쓰레드 하나를 깨운다. SCHED_FIFO 나 SCHED_
함수명 pthread_cond_broadcast
인자 pthread_cond_t *cond
기능 조건변수 cond 로 브로드캐스트를 하여 모든 대기자들을 깨운다
  • computer/rtcclab/vpos_분석_-_4.함수.txt
  • Last modified: 3 years ago
  • by likewind