Ejemplo n.º 1
0
// return current resident set size in bytes
void get_memory_usage(size_t & now, size_t & hwm)
{
#if defined (PROCFS)
  std::string vmhwm;
  std::string vmrss;
  std::string line(128,'\0');

  now = 0;
  hwm = 0;

  /* Read memory size data from /proc/pid/status
   * run "man proc" to get info on the contents of /proc/self/status
   */
  std::ifstream proc_status("/proc/self/status");
  if (!proc_status) return;

  while (vmhwm.empty() || vmrss.empty())
  {

    if(!std::getline(proc_status, line)) return;

    /* Find VmHWM */
    else if (line.substr(0, 6) == "VmHWM:")
    {
      vmhwm = line.substr(7);
      std::istringstream iss(vmhwm);
      iss >> hwm;
      hwm *= 1024;
    }
    /* Find VmRSS */
    else if (line.substr(0, 6) == "VmRSS:")
Ejemplo n.º 2
0
//uint64_t exception_stack;
void start(uint32_t* modulep, void* physbase, void* physfree)
{
	uint64_t address = (uint64_t)(&idt);
        uint16_t size_idt = (uint16_t)(sizeof(idt));
	int my_variable = 0;
//        int i = 922222895;
	//int i =0;
        struct smap_t {
                uint64_t base, length;
                uint32_t type;
        }__attribute__((packed)) *smap;
	struct process *newproc1,*newproc2,*newproc3;
        cls();
//        while(--i>0);
        while(modulep[0] != 0x9001) modulep += modulep[1]+2;
        for(smap = (struct smap_t*)(modulep+2); smap < (struct smap_t*)((char*)modulep+modulep[1]+2*4); ++smap) {
                if (smap->type == 1 /* memory */ && smap->length != 0) {
                   kprintf("Available Physical Memory [%x-%x]\n", smap->base, smap->base + smap->length);
                }
        }
        kprintf("tarfs in [%p:%p]\n", &_binary_tarfs_start, &_binary_tarfs_end);
        set_all_handlers();
        setup_idtr(address,size_idt);
	npages_determine(134205440);
	set_consts((uint64_t)physbase,(uint64_t)physfree);
	mm_init();
	loadcr3(katopa((uint64_t)pml4e),(uint64_t)physbase,(uint64_t)physfree);
	my_variable++;
	newproc1 = (struct process*)process_setup((uint64_t)physbase,(uint64_t)physfree,"bin/newhello");
	curproc_count++;
	newproc2 = process_setup((uint64_t)physbase,(uint64_t)physfree,"bin/sacrifice");
	curproc_count++;
	newproc3 = process_setup((uint64_t)physbase,(uint64_t)physfree,"bin/pragathi");
	proc_status(newproc1);
	proc_status(newproc2);
	proc_status(newproc3);	
	cur_proc = newproc1;
	/*while(i<10000)
	{
	kmalloc(30);
	i++;
	}*/
	exception_stack = page_alloc();
	first_sched();
        while(1){}

}
Ejemplo n.º 3
0
void		proc_parser(t_proc *proc, char *path, t_task *task, t_taupe *t)
{
  (task->overall)++;
  proc_status(proc, path, task);
  proc_stat(proc, path, t->old);
  proc_statm(proc, path, t->mem);
  if (proc->status == 'S')
    (task->sleep)++;
  else if (proc->status == 'R')
    (task->run)++;
  else if (proc->status == 'Z')
    (task->zombie)++;
  else if (proc->status == 'T')
    (task->stop)++;
}
/*
--------------------------------------------------
void mpLoad(STRING *scan_path, STRING *scan_ext)

Desc:

Returns: -
--------------------------------------------------
*/
void mpLoad(STRING *scan_path, STRING *scan_ext) {
	
	WriteLog("[ ] Scanning for external music...");
	
	STRING *_scan_path = str_create(scan_path); // Prevent modification of the original string
	
	mpSongs = txt_for_dir(mpPool, str_cat(_scan_path,scan_ext) );
	while(proc_status(txt_for_dir)) wait(1);
	
	str_remove(_scan_path);
	
	WriteLog(", found " , (var) mpSongs ); // 
	WriteLog(" tracks.");
	NewLine();
	
	WriteLog("[X] Task completed.");
	NewLine();
	
}
Ejemplo n.º 5
0
static ssize_t proc_read(FAR struct file *filep, FAR char *buffer,
                         size_t buflen)
{
  FAR struct proc_file_s *procfile;
  FAR struct tcb_s *tcb;
  irqstate_t flags;
  ssize_t ret;

  fvdbg("buffer=%p buflen=%d\n", buffer, (int)buflen);

  /* Recover our private data from the struct file instance */

  procfile = (FAR struct proc_file_s *)filep->f_priv;
  DEBUGASSERT(procfile);

  /* Verify that the thread is still valid */

  flags = irqsave();
  tcb = sched_gettcb(procfile->pid);

  if (!tcb)
    {
      fdbg("ERROR: PID %d is not valid\n", (int)procfile->pid);
      irqrestore(flags);
      return -ENODEV;
    }

  /* Provide the requested data */

  switch (procfile->node->node)
    {
    case PROC_STATUS: /* Task/thread status */
      ret = proc_status(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

    case PROC_CMDLINE: /* Task command line */
      ret = proc_cmdline(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

#ifdef CONFIG_SCHED_CPULOAD
    case PROC_LOADAVG: /* Average CPU utilization */
      ret = proc_loadavg(procfile, tcb, buffer, buflen, filep->f_pos);
      break;
#endif
    case PROC_STACK: /* Task stack info */
      ret = proc_stack(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

    case PROC_GROUP_STATUS: /* Task group status */
      ret = proc_groupstatus(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

    case PROC_GROUP_FD: /* Group file descriptors */
      ret = proc_groupfd(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

     default:
      ret = -EINVAL;
      break;
    }

  irqrestore(flags);

  /* Update the file offset */

  if (ret > 0)
    {
      filep->f_pos += ret;
    }

  return ret;
}
Ejemplo n.º 6
0
static int procmgr_handler(message_context_t *mctp, int code, unsigned flags, void *handle) {
	int									n = ENOSYS;
	resmgr_context_t					*ctp = (resmgr_context_t *) mctp;
	union proc_msg_union_local {
		uint16_t						type;
		proc_getsetid_t					getsetid;
		proc_setpgid_t					setpgid;
		proc_wait_t						wait;
		proc_fork_t						fork;
		proc_umask_t					umask;
		proc_guardian_t					guardian;
		proc_session_t					session;
		proc_daemon_t					daemon;
		proc_event_t					event;
		sys_conf_t						conf;
		sys_cmd_t						syscmd;
	}								*msg = (union proc_msg_union_local *)(void *) ctp->msg;

	ctp->status = 0;
	if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
		ENDIAN_SWAP16(&msg->type);
	}
	switch(msg->type) {
	case _PROC_GETSETID:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_getsetid(ctp, &msg->getsetid);
		}
		break;

	case _PROC_SETPGID:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_setpgid(ctp, &msg->setpgid);
		}
		break;

	case _PROC_WAIT:
		n = procmgr_wait(ctp, &msg->wait);
		break;

	case _PROC_FORK:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_fork(ctp, &msg->fork);
		}
		break;

	case _PROC_SPAWN:
		n = procmgr_spawn(ctp, msg, NULL);
		break;

	case _PROC_POSIX_SPAWN:
		n = procmgr_pspawn(ctp, msg);
		break;

	case _PROC_UMASK:
		n = procmgr_umask(ctp, &msg->umask);
		break;

	case _PROC_GUARDIAN:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_msg_guardian(ctp, &msg->guardian);
		}
		break;

	case _PROC_SESSION:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_msg_session(ctp, &msg->session);
		}
		break;

	case _PROC_DAEMON:
		n = procmgr_msg_daemon(ctp, &msg->daemon);
		break;

	case _PROC_EVENT:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_event(ctp, &msg->event);
		}
		break;

	case _PROC_RESOURCE:
		if(ctp->info.flags & _NTO_MI_ENDIAN_DIFF) {
			n = EENDIAN;
		} else {
			n = procmgr_msg_resource(ctp, msg);
		}
		break;

	case _SYS_CONF:
		n = sysmgr_conf(ctp, &msg->conf);
		break;

	case _SYS_CMD:
		n = sysmgr_cmd(ctp, &msg->syscmd);
		break;

	case _SYS_VENDOR:
		if ( sys_vendor_handler_hook ) {
			n = sys_vendor_handler_hook(ctp);
		}
		break;

	default:
		break;
	}

	return proc_status(ctp, n);
}
Ejemplo n.º 7
0
static ssize_t proc_read(FAR struct file *filep, FAR char *buffer,
                         size_t buflen)
{
  FAR struct proc_file_s *procfile;
  FAR struct tcb_s *tcb;
  irqstate_t flags;
  ssize_t ret;

  finfo("buffer=%p buflen=%d\n", buffer, (int)buflen);

  /* Recover our private data from the struct file instance */

  procfile = (FAR struct proc_file_s *)filep->f_priv;
  DEBUGASSERT(procfile != NULL);

  /* Verify that the thread is still valid */

  flags = enter_critical_section();
  tcb = sched_gettcb(procfile->pid);

  if (tcb == NULL)
    {
      ferr("ERROR: PID %d is not valid\n", (int)procfile->pid);
      leave_critical_section(flags);
      return -ENODEV;
    }

  /* Provide the requested data */

  switch (procfile->node->node)
    {
    case PROC_STATUS: /* Task/thread status */
      ret = proc_status(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

    case PROC_CMDLINE: /* Task command line */
      ret = proc_cmdline(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

#ifdef CONFIG_SCHED_CPULOAD
    case PROC_LOADAVG: /* Average CPU utilization */
      ret = proc_loadavg(procfile, tcb, buffer, buflen, filep->f_pos);
      break;
#endif
    case PROC_STACK: /* Task stack info */
      ret = proc_stack(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

    case PROC_GROUP_STATUS: /* Task group status */
      ret = proc_groupstatus(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

    case PROC_GROUP_FD: /* Group file descriptors */
      ret = proc_groupfd(procfile, tcb, buffer, buflen, filep->f_pos);
      break;

#if !defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_FS_PROCFS_EXCLUDE_ENVIRON)
    case PROC_GROUP_ENV: /* Group environment variables */
      ret = proc_groupenv(procfile, tcb, buffer, buflen, filep->f_pos);
      break;
#endif

     default:
      ret = -EINVAL;
      break;
    }

  leave_critical_section(flags);

  /* Update the file offset */

  if (ret > 0)
    {
      filep->f_pos += ret;
    }

  return ret;
}